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形变量可以被硬件改变
在需要硬件改变变量得场合中不可或缺!!!

  • 23
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值