你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F303开发】+使用SRAM的BitBand进行原子操作

[复制链接]
creep 提问时间:2015-6-25 22:21 /
本帖最后由 creep 于 2015-6-25 22:27 编辑

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

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

使用原子操作的方法比较简单。我们把SRAM bitband region区域和SRAM bit-band alias区域进行某种映射,这样在操作SRAM bit-band alias时就对应的操作了SRAM的对应的bit了,对应的换算方法如下:根据这个关系可在程序中进行计算位置。
bitband.jpg
在操作SRAM bit-band alias时是按照word进行操作的,对应的位置是SRAM bitband region中的一个bit,其中只有SRAM bit-band alias的bit[0]才能影响到SRAM bitband region中的一个bit的值,也就是说SRAM bit-band alias的bit[31-1]在实际操作中不起作用,详细的转换关系如下
bitband.jpg
将上面的对应关系转为代码如下,使用几个宏定义来操作SRAM的某个变量的某个bit,值得注意的是宏Var_GetBit_BB(VarAddr, BitNumber)  是个可修改的左值(lvalue)宏,我们可以对其直接赋值来修改某个变量的值,这个就能简单的实现原子操作的置1和清0,这也是推荐的使用方法。
bitband.jpg
测试代码简单的对sram中的变量的某个bit进行修改,运行结果可通过串口输出如下,可以看到变量的VarAddr的bit0可以通过上面的宏进行修改读取。
bitband.jpg
原子操作在其他处理器中也比较常见,具体ARM内核是如果通过对bitband的来实现原子操作的我也没有找到详细的说明文档。
测试代码:
F03RE_BitBand.rar (392.76 KB, 下载次数: 172)
收藏 3 评论14 发布时间:2015-6-25 22:21

举报

14个回答
Paderboy 回答时间:2015-6-25 23:11:04
多谢分享,又学习了。。。
mark0668 回答时间:2015-6-25 23:48:09
多谢分享
ROCK0525 回答时间:2015-6-26 08:18:55
学习了,多谢分享
jiaswang 回答时间:2015-6-26 08:40:26
多谢分享!
stary666 回答时间:2015-6-26 09:42:59
学习,,,,,,,
creep 回答时间:2015-6-26 10:26:15
Paderboy 发表于 2015-6-25 23:11
多谢分享,又学习了。。。

共同学习~~~~
博根 回答时间:2015-6-26 10:29:23
学习了,多谢分享
wyxy163@126.com 回答时间:2015-10-13 19:47:28
提示: 作者被禁止或删除 内容自动屏蔽
STM1024 回答时间:2018-6-8 15:42:21
good,翻出来让更多人看到
alexmahonelau 回答时间:2019-1-10 09:31:38
学习了。。。
GeorgePCB 回答时间:2019-5-27 19:27:28
多谢分享,马上试用下
cliff-336641 回答时间:2019-6-6 15:58:58
多谢楼主无私分享。
唐英tcy 回答时间:2019-6-10 08:45:34
多谢分享
_007 回答时间:2019-12-6 10:31:02
多谢分享,学习了,楼主好人
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版