登录 注册
购物车0
TOP
Imgs 行业资讯

0

那些书本上都没有提到的C语言volatile用法

2021-11-01 11:12:22
很多程序员不能正确理解C关键字volatile也就不足为奇了。因为大多数C语言书籍通常会路过一两句话,这篇文章将告诉你如何正确使用它。
在C  /C嵌入式代码中,你有没有经历过以下情况:
代码执行是正常的,直到您打开编译器优化。
代码执行正常直到中断开启。
奇怪的硬件驱动程序。
RTOS的任务独立运行,直到产生其他任务。
如果你的回答是“是”,很可能你没有使用C关键字volatile。你不是唯一一个。很多程序员不能正确使用volatile。不幸的是,大多数C语言书籍对volatile表现出蔑视,而volatile只是简单的传递。
Volatile是声明变量时使用的限定符。它告诉编译器,变量值随时可能发生变化,而这种变化不是由代码引起的。给编译器这个提示很重要。在我们开始之前,我们总是先看看volatile的语法。
c语言关键字可变语法。
将变量声明为volatile,并在数据类型之前或之后添加关键字volatile。以下语句将foo声明为可变整数。
volatile  int  fooint  volatile  foo
volatile  uint8 _ t  * pReguint8_t挥发性* pReg
易失性指针很少指向非易失性变量(我只使用过一次),但我仍然给出了相应的语法。
int  * volatile  p;
顺便请百度搜索数据类型前的volatile关键字。
最后,如果在struct或union之前使用volatile关键字,这意味着struct或union的所有内容都是可变的。如果这不是您的意图,您可以在struct或union成员上使用volatile关键字。
正确使用c关键字volatile。
每当变量可能被意外修改时,都需要声明为volatile。实际上,只能修改三种类型的数据:
外设寄存器地址映射。
修改中断服务程序中的全局变量。
在多线程和多任务应用程序中,全局变量由多个任务读写。
接下来,我们将分别讨论上述三种情况。
外围寄存器
嵌入式系统包含真实的硬件,通常有复杂的外围设备。这些外设寄存器的值可以异步修改。举个简单的例子,我们需要将一个8位状态寄存器的地址映射到0x1234。在程序中循环查看状态寄存器的值是否变为非0。C语言操作寄存器的方法,请参考本文:C语言操作寄存器的常用方法。

高都电子,为客户创造价值!

双面板免费加费,四层板加急打样,厚铜电路板打样

Xcm