本帖最后由 warship 于 2018-7-2 23:14 编辑
位带功能将外设的各个寄存器的每1bit映射到别名存储区扩充到了1个字(32位),比如GPIO B的IDR8(控制PB8)的BIT位,别名存储地址为0x4221 81A0,当我想置位PB8的时候,直接访问别名存储地址就可以了,即: *(0x422181A0)=0x01;
那么问题来了: 这个地址是专用的吗,不能被其它实际的物理存储器占用吗?
假如可以有其它实际的物理存储器占用该地址,
我用上述指令访问的时候,程序怎么知道我是正常访问这个存储器,还是只利用它来给PB8置位呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我是直接用的,没深究。你可以看CM3权威指南,中文版那个,有详细说明的
大容量的F103ZET的SRAM只有64kB,而block2用作外设总线地址,这些我们只能使用。
SRAM低1MB可以映射到0x2200,0000开始的地址作为位带区操作,这个地址是保留地址,外扩存储器应该需要避开这片空间。
至于操作位带区是不是keil自动转为操作映射的bit这个我认为是STM32内部本身支持的,如果没有内核支持就存在转换过程,也就省不了操作周期了。如果不是这样,那么手册上关于用位带操作可以避免多任务系统中共享资源出现紊乱危机就无从谈起了。
具体看CM3权威指南,P.88-P.90
http://www.openedv.com/forum.php?mod=viewthread&tid=274196
你这样发问,是因为你根本没有搞清位操作的基本状况。
你问的这种属于宏定义,与位操作没有任何关系的。
一周热门 更多>