前言
在阅读意法官方给的STM32
固件库的工程中的时候偶然看见了_IO
修饰的变量然后发现其实这是STM32
固件库中的宏定义关键字,其实它是volatile
关键字,本篇博客用于整理和其相关资料。
#define __I volatile const /*!< defines 'read only' permissions */
#define __O volatile /*!< defines 'write only' permissions */
#define __IO volatile /*!< defines 'read / write' permissions */
1、有关volatile的故事
volatile
影响编译器编译的结果,volatile
变量是随时可能发生变化的,与volatile
变量有关的运算,不要进行编译优化,以免出错。
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
例如: