关于STM32库中 __IO 修饰符(volatile修饰符)

STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原来是在Core_cm3.h中被重定义,其实就是volatile,句子如下

  1. /* IO definitions (access restrictions to peripheral registers) */
  2. #ifdef __cplusplus
  3. #define __I volatile /*!< defines 'read only' permissions */
  4. #else
  5. #define __I volatile const /*!< defines 'read only' permissions */
  6. #endif
  7. #define __O volatile /*!< defines 'write only' permissions */
  8. #define __IO volatile /*!< defines 'read / write' permissions */

不难看出这些修饰管是用于指示编译器在编译时如何对变量进行操作。volatile 的作用就是指示编译器不要因优化而省略此指令,必须每次都直接读写其值。 写一段测试代码如下

  1. u8 test;
  2. test = 1;
  3. test = 2;
  4. test = 3;

设置优化级别中级 运行后test会被直接取值为3 只有最后一个语句被编译 如用volatile

  1. volatile u8 test;
  2. test = 1;
  3. test = 2;
  4. test = 3;

则所有语句都会被编译。test先后被设置成1、2、3 由此可以看出这个作用在IO操作,寄存器操作,特殊变量,多线程变量读写都是很重要。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python专栏

10个Python面试常问的问题

1394
来自专栏老司机的技术博客

人人都能学会的python编程教程3:字符串和编码

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时...

4378
来自专栏老马说编程

计算机程序的思维逻辑 (6) - 如何从乱码中恢复 (上)?

我们在处理文件、浏览网页、编写程序时,时不时会碰到乱码的情况。乱码几乎总是令人心烦,让人困惑。希望通过本节和下节文章,你可以自信从容地面对乱码,恢复乱码。 谈...

1955
来自专栏编程

Python基础—让你规范Python语言的使用

群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 ? Lint 定义: pylint是一个在Py...

1918
来自专栏web前端

JavaScript之对数组中元素进行增删改

JavaScript中数据类型无非是:简单类型+复杂类型,什么是简单什么又是复杂。从电脑物理存储上讲,简单就是所见即所得,你看见什么,电脑里面存的就只是什么,并...

17910
来自专栏面朝大海春暖花开

c++入门笔记

C++函数的返回值类型可以是除数组和函数以外的任何类型。 函数可以返回一个引用,将函数说明为返回一个引用的主要目的是为了将函数用在赋值运算符的左边。函数原型的表...

1024
来自专栏程序员互动联盟

【编程基础第十一讲】代码如何写才最漂亮第一篇

存在问题: 好多小伙伴对编码的格式作用模糊,以为只要完成功能就行,其实这种观点是错误的,一定要重视代码规范,不然你哭的地都找不到。 如何实施: 良好的代码开发习...

2637
来自专栏数说工作室

统计师的Python日记【第1天:谁来给我讲讲Python?】

统计师的Python日记 【第一天】谁来给我讲讲Python? 我是一名数据分析师,曾在漫长的岁月中使用SAS、Matlab和R(使用频率依次递减)。其他如...

3696
来自专栏编程一生

PHP开发人员对JAVA的WEB开发入门(初版-基础知识)

1054
来自专栏鸿的学习笔记

Python和Scala的定义变量

每一门的编程语言背后都代表着某一种特别的哲学,由这一哲学进而设计出属于这门程序语言的语法,Python和Scala也不例外。我们从变量的定义去一窥Python和...

812

扫码关注云+社区