全局变量中断原子操作_M3&M4内核位帯操作及原子操作原理

本文介绍了M3&M4内核的位带操作特性,特别是如何利用位带技术实现全局变量的原子操作,以避免中断或并发任务导致的数据不一致问题。通过SRAM位带区域和SRAM位带别名的映射,可以实现对特定变量位的原子读写。文中提供了转换关系和宏定义示例,展示了如何在实际代码中应用这些概念。
摘要由CSDN通过智能技术生成

在M3&M4内核中有2块区域可进行BitBand,这2个区域分别位于最低1M的SRAM和最低1M的外设寄存器区域,估计大家都知道了F303的GPIO寄存器区域并没有在位带区域,所以我们也就没法像操作其他的系列那样直接用位带操作去操作IO口的某个pin了。SRAM和peripheral的有效范围

F303的GPIO寄存器位置并没有位于可操作的bitband范围:

对比F429的区域GPIO寄存器位于bitband区域:

从上面的对比来看,F303的SRAM还是可以使用bitband的。使用SRAM的bitband可以实现变量的原子操作(atomic

read-modify-write and read)。

如果在程序有多处的地方对同一个变量进行读写操作,那么使用原子操作的好处是对某个变量进行读写时不会被中断或者其他的任务打断进而影响到该变量的值发生不可估计的操作,这在我们实际使用中很有用。比如我们经常在中断中对某个变量进行置1或者清零0然后再在其他的地方根据这个变量进行某些操作,如果我们对这个变量读取时正好发生了中断,那么中断中很有可能对这个变量进行修改,这样的话当退出中断,我们再次读取的这个值就是错的了,所以在ucos2中的对于一些全局变量操作时都是先关掉中断然后在操作最后打开中断,这样才能避免我们刚才说的那个问题。

使用原子操作的方法比较简单。我们把SRAM bitband region区域和SRAM bit-band

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值