STM32 keil中__IO得意思
__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得意思相关推荐
- 关于STM32库中 __IO 修饰符(volatile修饰符,反复无常的意思)
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO ...
- STM32 keil中编译遇到的问题
发现 移植的SPI程序 说里面的 SPI_InitTypeDef 所有有关 SPI库函数的都找不到 这是因为 用的是 原子的程序 在 config函数中 把这个注释了 转载于:https:/ ...
- STM32 KEIL中 负数绝对值处理
使用数码管显示负温度时需要把负数转换为绝对值 #include<math.h> 使用abs 或者自己写函数 #define ABS(x) ((x)>=0?(x):-(x))) 转载于 ...
- STM32 Keil中关于stlink的调试 下载设置
1.首先找到魔法棒,或者右键项目,选择第一个Options of........ 2.找到Debug ,选择stlink下载 点击setting 3.选择模式为SW模式,点击确定,进入下一步 4. ...
- 基于Ubuntu(x86)系统和STM32(Keil)编写C程序分别进行编程、验证
文章目录 实验内容 一.基本概念 (一).全局变量 (二).局部变量 (三).堆和栈 二.编程验证 (一).基于Ubuntu用Linux系统编写C程序 (二).基于STM32用Keil编写C程序 三. ...
- 在keil中如何切换stm32的大中小容量芯片
在keil中如何切换stm32的大中小容量芯片 stm32的三种不同容量芯片及对应的启动文件** : startup_stm32f10x_ld.s: 适用于小容量 产品----->STM32F1 ...
- stm32单片机在keil中如何建立工程模板
工程架构: 具体步骤: 1,建立工程文件夹,Keil中新建工程,选择型号(这里我们示范的是MD) 2,工程文件夹里建立Start.Library.User等文件夹,复制固件库里面的文件到工程文件夹 S ...
- keil中更改stm32芯片类型需要修改的配置
在学习stm32过程中,打开网上的例程,例程中使用的芯片往往与我们使用的不同,这时我们需要修改程序的配置,具体需要修改的有以下几处: 1.选择芯片 Option->Device ->选择需 ...
- STM32编程中枚举和结构体的结合
01.结构体定义 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体的定义: ...
最新文章
- Excel+bat批量更改文件名
- datatable java实现分页_jQuery Datatable - 使用Php的服务器端处理数据分页
- Linux文件中的stat结构
- DP之最优二叉查找树
- Python之flask结合Bootstrap框架快速搭建Web应用
- CAN总线基础(二)
- 第十九讲 拉普拉斯变换引入
- 重磅发布|新一代云原生数据仓库AnalyticDB「SQL智能诊断」功能详解
- 第三次学JAVA再学不好就吃翔(part18)--数组操作
- 数据结构比较型排序算法分析及选择
- 假如把地球46亿年历史压缩到一天,竟然有这么多惊奇的发现!
- .net 实时通信_【WebSocket】实时多人答题对战游戏
- 【kafka】java使用jmx 监控Kafka
- Spring : ApplicationContext和BeanFactory
- django css,Django表单中的CSS样式
- 用js实现的对css的一些操作方法
- kali火狐浏览器设置中文
- ADXL345-数字加速度计
- xposed模块编写教程_新手不要再被误导!这是一篇最新的Xposed模块编写教程
- 逻辑运算符以及逻辑表达式