您的位置 首页 主动

关于STM32库中 __IO 修饰符(volatile修饰符,翻云覆雨的意思)

STM32例子代码中会有像这样的代码static__IOuint32_tTimingDelay;这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查…

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操作,寄存器操作,特别变量,多线程变量读写都是很重要。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/276317.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部