关于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 条评论
登录 后参与评论

相关文章

来自专栏欧阳大哥的轮子

深入解构iOS系统下的全局对象和初始化函数

事件源于接入了一个第三方库导致应用出现了大量的crash记录,很奇怪的是这么多的crash居然没有收到用户的反馈信息! 在这个过程中每个崩溃栈的信息都明确的指向...

1812
来自专栏Java架构沉思录

Redis进阶不得不了解的内存优化细节

Redis所有的数据都在内存中,而内存又是非常宝贵的资源。对于如何优化内存使用一直是Redis用户非常关注的问题。本文让我们深入到Redis细节中,学习内存优化...

2702
来自专栏游戏开发那些事

【游戏开发】小白学Lua(上)

  在很多游戏中,脚本语言是不可或缺的一部分,很多游戏都使用到了Lua,js,python一类的脚本,脚本语言可以在很多方面给开发进程带来帮助。脚本语言可以作为...

1202
来自专栏Python中文社区

Python3.6新特性官方文档中文版

原文:What’s New In Python 3.6 翻译团队:Py字幕组 首发刊物:PyCN技术评论(点击菜单栏:社区-刊物进入) Github:htt...

4739
来自专栏猿人谷

C++内存管理学习堆和栈

一 C++内存管理 1.内存分配方式   在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。 1.1 C语言和C++内存分...

2916
来自专栏十月梦想

ES6语法基础之let用法

简单讲解一些ES6语法基础!了解一些es6新特性!当然下一步需要学习的vue框架也是基于es6的,因此很有必要学习下es6语法,接下来几次简单讲解es6语法!

843
来自专栏技术栈大杂烩

Python: 受限制的 "函数调用"

函数功能简单明了, 对于结果, 大家应该也不会有太大的异议:func分别是取得全局命名空间中a的值和使用内置命名空间中的函数id获取了a的地址. 熟悉Pytho...

1363
来自专栏点滴积累

geotrellis使用(三十)使用geotrellis读取PostGIS空间数据

前言 最近事情很多,各种你想不到的事情——such as singing and dancing——再加上最近又研究docker上瘾,所以geotrellis看...

4107
来自专栏北京马哥教育

符合语言习惯的 Python 优雅编程技巧

Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们...

1324
来自专栏owent

我们的Lua类绑定机制

最近一个人搞后台,框架底层+逻辑功能茫茫多,扛得比较辛苦,一直没抽出空来写点东西。

2101

扫码关注云+社区