关于STM32库中 __IO 修饰符(volatile修饰符)
来源:互联网 发布:决战武林骑兵进阶数据 编辑:程序博客网 时间:2024/06/06 10:02
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操作,寄存器操作,特殊变量,多线程变量读写都是很重要。
0 0
- 关于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修饰符
- 强制类型转换
- Cocos2d-x中停止播放背景音乐
- VO , PO , BO , QO, DAO ,POJO,
- 响应式的嵌入内容和图片
- 复习笔记_1。
- 关于STM32库中 __IO 修饰符(volatile修饰符)
- 多线程实现内部类的两种方式
- 转:Tomcat 启动报错The APR based Apache Tomcat Native l...
- web服务交互中HTTP数据内容GZIP,ZLIB格式压缩与解压缩封装(共享)
- 定制new和delete更改内存管理方案
- R学习-方差分析
- [Android] Volley源码分析(五)答疑
- 单向链表(六) 工程源码
- Ubuntu中Apache修改DocumentRoot(修改网站根目录)