STM32 keil中__IO得意思
Posted QWQ_DIODA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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得意思的主要内容,如果未能解决你的问题,请参考以下文章
使用keil5编译stm32,头文件core_cmFunc.h中,是预定义__CC_ARM,还是__GNUC__?
用keil和Jlink进行对stm32进行硬件仿真,在仿真界面中怎样看IO口状态(就是怎样调出IO口的寄存器)