关于位带操作的疑问

2019-07-21 08:07发布

本帖最后由 warship 于 2018-7-2 23:14 编辑

位带功能将外设的各个寄存器的每1bit映射到别名存储区扩充到了1个字(32位),比如GPIO B的IDR8(控制PB8)的BIT位,别名存储地址为0x4221 81A0,当我想置位PB8的时候,直接访问别名存储地址就可以了,即:     *(0x422181A0)=0x01;
那么问题来了:  这个地址是专用的吗,不能被其它实际的物理存储器占用吗?
假如可以有其它实际的物理存储器占用该地址,
我用上述指令访问的时候,程序怎么知道我是正常访问这个存储器,还是只利用它来给PB8置位呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
xiatianyun
2019-07-22 04:12
我昨晚刚看位带知识,我的理解和楼主大体一样。
大容量的F103ZET的SRAM只有64kB,而block2用作外设总线地址,这些我们只能使用。
SRAM低1MB可以映射到0x2200,0000开始的地址作为位带区操作,这个地址是保留地址,外扩存储器应该需要避开这片空间。
至于操作位带区是不是keil自动转为操作映射的bit这个我认为是STM32内部本身支持的,如果没有内核支持就存在转换过程,也就省不了操作周期了。如果不是这样,那么手册上关于用位带操作可以避免多任务系统中共享资源出现紊乱危机就无从谈起了。
具体看CM3权威指南,P.88-P.90

一周热门 更多>