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

查看: 6935|回复: 14

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

[复制链接]

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2015-6-25 22:21:36 | 显示全部楼层 |阅读模式
本帖最后由 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, 下载次数: 166)
<
回复

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2015-6-25 23:11:04 | 显示全部楼层
多谢分享,又学习了。。。
回复 支持 反对

使用道具 举报

47

主题

1210

回帖

5

蝴蝶豆

论坛元老

最后登录
2020-8-13
发表于 2015-6-25 23:48:09 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

2

主题

501

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-18
发表于 2015-6-26 08:18:55 | 显示全部楼层
学习了,多谢分享
回复 支持 反对

使用道具 举报

7

主题

311

回帖

0

蝴蝶豆

高级会员

最后登录
2016-3-23
发表于 2015-6-26 08:40:26 | 显示全部楼层
多谢分享!
回复 支持 反对

使用道具 举报

100

主题

3617

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2015-6-26 09:42:59 | 显示全部楼层
学习,,,,,,,
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2015-6-26 10:26:15 | 显示全部楼层
Paderboy 发表于 2015-6-25 23:11
多谢分享,又学习了。。。

共同学习~~~~
回复 支持 反对

使用道具 举报

47

主题

381

回帖

7

蝴蝶豆

论坛元老

最后登录
2020-9-19
发表于 2015-6-26 10:29:23 | 显示全部楼层
学习了,多谢分享
回复 支持 反对

使用道具 举报

52

主题

3313

回帖

61

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2015-10-13 19:47:28 | 显示全部楼层
学习了,不错
回复 支持 反对

使用道具 举报

29

主题

2129

回帖

127

蝴蝶豆

论坛元老

最后登录
2020-12-7
发表于 2018-6-8 15:42:21 | 显示全部楼层
good,翻出来让更多人看到
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版