C语言:volatile
#ifdef __cplusplus
#define __I volatile
/*!< defines 'read only' permissions */
#else
#define __I volatile const
/*!< defines 'read only' permissions */
#endif
#define __O volatile
/*!< defines 'write only' permissions */
#define __IO volatile
/*!< defines 'read / write' permissions */
上面的代码中使用到了volatile这个关键字。其作用是:不让编译器进行优化 ,即每次读取或者修改值的时候 ,都必须重新从内存或者寄存器中读取 或者修改。
typedef unsigned int u8;
int main(){
u8 test;
test = 1;
test = 2;
test = 3;
return 0;
}
如上,设置优化级别中级,运行后test会被直接取值为3 只有最后一个语句被编译。什么情况下会出问题呢?
当输入或者输出同一个值时,就可能因为优化而被忽略
运行后test会被直接取值为3 只有最后一个语句被编译,这对于单片机控制而言是很糟的,所以要加volatile
typedef unsigned int u8;
int main(){
volatile u8 test;
test = 1;
test = 2;
test = 3;
return 0;
}

浙公网安备 33010602011771号