__IO解释

STM32得库函数中(HAL和LL库都有),存在一个__IO得宏定义

#define     __I         volatile const        /*!< defines 'read only' permissions      */
#define     __O     volatile                  /*!< defines 'write only' permissions     */
#define     __IO    volatile                  /*!< defines 'read / write' permissions   */

volatile得含义为

允许硬件改变变量得数值

我来解释一下

假如我们定义一个变量

int Flash_Num __attribute__((at(Outer_Flash_ADDR)));
/*******************************************
解释
int x __attribute__((at(ADDR)));
可以将x存放在指定的地址ADDR中
********************************************/

而这个变脸得地址,我们利用attribute((at(ADDR)));这个功能将Outer_Flash_ADDR将定义的Flash_Num变量数据存入了外部扩展flash中。

这时,突然!有一个外部得设备,用硬件得方式把Flash_Num地址中存储得变量给更改了!!!我们这时还想知道更改后得数据是啥。

但是,悲剧发生了,我们用软件读出来得变量数值竟然毫无变化!

因为软件只能读软件改变得变量,读不出来硬件改变得变量,呐怎么办呐????

这时候你只需要在定义变量前加一个__IO

__IO int Flash_Num __attribute__((at(Outer_Flash_ADDR)));

瞬间就成功读出来了~~~


总结

volatile形变量可以被硬件改变
在需要硬件改变变量得场合中不可或缺!!!

STM32 keil中__IO得意思相关推荐

  1. 关于STM32库中 __IO 修饰符(volatile修饰符,反复无常的意思)

    STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay;  这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO ...

  2. STM32 keil中编译遇到的问题

    发现 移植的SPI程序 说里面的 SPI_InitTypeDef 所有有关  SPI库函数的都找不到 这是因为 用的是  原子的程序   在 config函数中  把这个注释了 转载于:https:/ ...

  3. STM32 KEIL中 负数绝对值处理

    使用数码管显示负温度时需要把负数转换为绝对值 #include<math.h> 使用abs 或者自己写函数 #define ABS(x) ((x)>=0?(x):-(x))) 转载于 ...

  4. STM32 Keil中关于stlink的调试 下载设置

    1.首先找到魔法棒,或者右键项目,选择第一个Options of........ 2.找到Debug ,选择stlink下载   点击setting 3.选择模式为SW模式,点击确定,进入下一步 4. ...

  5. 基于Ubuntu(x86)系统和STM32(Keil)编写C程序分别进行编程、验证

    文章目录 实验内容 一.基本概念 (一).全局变量 (二).局部变量 (三).堆和栈 二.编程验证 (一).基于Ubuntu用Linux系统编写C程序 (二).基于STM32用Keil编写C程序 三. ...

  6. 在keil中如何切换stm32的大中小容量芯片

    在keil中如何切换stm32的大中小容量芯片 stm32的三种不同容量芯片及对应的启动文件** : startup_stm32f10x_ld.s: 适用于小容量 产品----->STM32F1 ...

  7. stm32单片机在keil中如何建立工程模板

    工程架构: 具体步骤: 1,建立工程文件夹,Keil中新建工程,选择型号(这里我们示范的是MD) 2,工程文件夹里建立Start.Library.User等文件夹,复制固件库里面的文件到工程文件夹 S ...

  8. keil中更改stm32芯片类型需要修改的配置

    在学习stm32过程中,打开网上的例程,例程中使用的芯片往往与我们使用的不同,这时我们需要修改程序的配置,具体需要修改的有以下几处: 1.选择芯片 Option->Device ->选择需 ...

  9. STM32编程中枚举和结构体的结合

    01.结构体定义 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体的定义: ...

最新文章

  1. Excel+bat批量更改文件名
  2. datatable java实现分页_jQuery Datatable - 使用Php的服务器端处理数据分页
  3. Linux文件中的stat结构
  4. DP之最优二叉查找树
  5. Python之flask结合Bootstrap框架快速搭建Web应用
  6. CAN总线基础(二)
  7. 第十九讲 拉普拉斯变换引入
  8. 重磅发布|新一代云原生数据仓库AnalyticDB「SQL智能诊断」功能详解
  9. 第三次学JAVA再学不好就吃翔(part18)--数组操作
  10. 数据结构比较型排序算法分析及选择
  11. 假如把地球46亿年历史压缩到一天,竟然有这么多惊奇的发现!
  12. .net 实时通信_【WebSocket】实时多人答题对战游戏
  13. 【kafka】java使用jmx 监控Kafka
  14. Spring : ApplicationContext和BeanFactory
  15. django css,Django表单中的CSS样式
  16. 用js实现的对css的一些操作方法
  17. kali火狐浏览器设置中文
  18. ADXL345-数字加速度计
  19. xposed模块编写教程_新手不要再被误导!这是一篇最新的Xposed模块编写教程
  20. 逻辑运算符以及逻辑表达式

热门文章

  1. 给社交软件“一星保护”:95后在想什么
  2. 两军对垒问题及个人的思考
  3. 连接 蓝牙HC - 05 模块 读写操作
  4. 华为鸿蒙系统手机会卡吗,鸿蒙系统的手机,会像安卓一样越来越卡吗?
  5. 计算机网络中型网吧规划设计,中小型网咖网络规划设计开题报告
  6. 从0开始实现一个合成大西瓜
  7. 密西西比河谷州立大学:Android应用程序开发(三)
  8. 消防应急通讯平台设计
  9. python3 输出中文、日文等等乱码问题的解决办法
  10. 大功率双伺服电机驱动板,包含原理图,PCB和原代码,基于STM32F4方案,支持霍尔,编码器,无感