关于STM32库中 __IO 修饰符(volatile修饰符)
来源:互联网 发布:全民枪战抽奖软件 编辑:程序博客网 时间:2024/06/06 19:10
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原来是在Core_cm3.h中被重定义,其实就是volatile,句子如下
/* IO definitions (access restrictions to peripheral registers) */
#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 的作用就是指示编译器不要因优化而省略此指令,必须每次都直接读写其值。
写一段测试代码如下
u8 test;
test = 1;
test = 2;
test = 3;
设置优化级别中级
运行后test会被直接取值为3 只有最后一个语句被编译
如用volatile
volatile u8 test;
test = 1;
test = 2;
test = 3;
则所有语句都会被编译。test先后被设置成1、2、3
由此可以看出这个作用在IO操作,寄存器操作,特殊变量,多线程变量读写都是很重要。
转载请注明 http://www.cdle.net
/* IO definitions (access restrictions to peripheral registers) */
#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 的作用就是指示编译器不要因优化而省略此指令,必须每次都直接读写其值。
写一段测试代码如下
u8 test;
test = 1;
test = 2;
test = 3;
设置优化级别中级
运行后test会被直接取值为3 只有最后一个语句被编译
如用volatile
volatile u8 test;
test = 1;
test = 2;
test = 3;
则所有语句都会被编译。test先后被设置成1、2、3
由此可以看出这个作用在IO操作,寄存器操作,特殊变量,多线程变量读写都是很重要。
转载请注明 http://www.cdle.net
- 关于STM32库中 __IO 修饰符(volatile修饰符)
- 关于STM32库中 __IO 修饰符(volatile修饰符)
- 关于STM32库中 __IO 修饰符(volatile修饰符)
- 关于STM32库中 __IO 修饰符(volatile修饰符,反复无常的意思)
- 关于volatile修饰符
- 关于Volatile修饰符
- Java中Volatile 修饰符
- 关于java修饰符transient 和 volatile
- 关于volatile修饰符的说明
- 关于volatile修饰符的一知半解
- volatile 限定修饰符
- volatile 修饰符
- Volatile修饰符
- volatile修饰符
- volatile修饰符
- register volatile 修饰符
- 限定修饰符volatile
- Volatile修饰符
- 记录php5.4与php-redis冲突的解决
- 位运算符
- python目录操作
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- 润乾V4中带有超链接的raq导入到新版V5中超链接错误的解决方法
- 关于STM32库中 __IO 修饰符(volatile修饰符)
- fedora 9 中英文相互兼容设置
- gdb+gdbserver
- LDD3 sleepy 模块
- Python参考手册(第4版)
- [剑指offer][面试题19]二叉树的镜像
- 个人算法题汇总(待续)
- MyEclipse未响应和更改工作空间
- C++ 数组指针