"
很多程序员无法正确理解C关键字volatile。这并不奇怪。大多数C-Cause的书只经过一两句话。这篇文章将告诉你如何正确使用它。
在C/C++嵌入式代码中,你有没有经历过以下几种情况:
●代码执行是正常的,直到您打开编译器优化
●代码执行正常–直到中断开启
●怪异的硬件驱动程序
● RTOS任务独立正常运行,直到产生其他任务
如果你的回答是“是”,很有可能你没有使用C抱怨关键词volatile。你不是唯一一个。很多程序员不能正确使用volatile。遗憾的是,大部分C语言书籍对volatile都表现出了蔑视,只是简单的擦肩而过。
Volatile是声明变量时使用的限定符。它告诉编译器变量值随时都可能发生变化,而且这种变化不是由代码引起的。给编译器这个提示很重要。在我们开始之前,我们总是先看看volatile的语法。
当您打开编译器优化时,程序总是无法执行。因为编译器将生成以下汇编代码:
程序优化的原因很简单。由于变量值已经读入累加器,所以不需要重复。编译器认为值不会改变。就这样,在第三行,程序进入了无限循环。为了告诉编译器我们的真实意图,我们需要修改函数的声明:
编译器生成的汇编代码:
像这样,我们得到了正确的行动。
中断服务程序(interrupt service routine的缩写)
在中断服务程序中,一些全局变量值经常被修改为主程序中的判断条件。例如,在串行中断服务程序中,可以检测是否接收到ETX字符。如果收到ETX,印度空间研究中心将设置一个全球标志。
错误的方式:
最后一个想法
有些编译器允许您隐式声明所有变量为易变的。请抵制这种诱惑,因为它会让你停止思考,当然也会导致低效的代码生成。
此外,不要责怪优化器或直接关闭它。现代的优化器已经足够优秀了,我都不记得上次遇到优化bug是什么时候了。相反,我经常看到程序员错误地使用volatile。
如果要求你修改一个奇怪的代码,请在程序中查找volatile关键字。如果你什么都没发现,上面讨论的例子可以为你提供一些解决问题的思路。
1.
2.
3.
4.
5.
1.《c语言关键字 书本里不会讲的C语言关键词volatile用法》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《c语言关键字 书本里不会讲的C语言关键词volatile用法》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1720432.html