首页 > 版块 > STM32 > 帖子正文

位段操作

蔡琰 发布于 2021-12-11 09:42
收藏 0 回复 0 浏览 144 原创

大家好!我是张飞实战电子蔡琰老师,今天给大家分享位段操作。

位段操作允许单次加载/存储操作(读/写)访问单个数据位,对于Cortex-M3,两个预定义的位段区域支持这种特性,其中一个位于SRAM区域的头1MB,另外一个则位于外设区域的头1MB。这两个区域可以同普通存储器一样访问,不过它们还可以通过被称作位段别名的独立区域进行操作。当使用位段别名地址时,可以通过每个字对齐的地址中数据的最低位,来访问每个单独的位。

例如,要将地址0x20000000中数据的第2位置1,除了可以通过读出数据、设置位然后写回数据的方式外,还可以通过单一指令执行这个操作,下面看一下两种情况的汇编执行流程。

图片2.jpg

图片3.jpg

类似地,如果我们需要读取存储器位置中的一个位,位段特性可以简化应用程序代码。例如,如果我们需要确定地址0x20000000处数据的第2位,我们可以采取下面图所示的步骤。

图片4.jpg

位段操作并不是一个新的想法,事实上,类似的特性已经在像8051之类的8位微处理器上存在30多年了。尽管Cortex-M3并没有位操作的特殊指令,而定义了特殊区域却可以让对这些区域的访问自动转换为位段操作。

下面是Cortex-M3在位段存储器寻址里使用的术语:

位段区域:支持位段操作的存储器区域。

位段别名:访问位段别名会引起对位段区域的访问(位段操作)。

在位段区域里,每个字被位段别名寻址区域里的32个字的最低位表示。事实上,在访问位段别名区域时,地址被重映射为位段地址。对于读操作,字被读出并且选定的位会被移入读返回数据的最低位;对于写操作,写入的位数据会被移入所需位的位置,并且执行读-修改-写的操作。


0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。