今天我看来看关于位带的操作啊,自己有了点想法。其它低处理器里面没有位带操作。而STM32里有。而关于位带的计算我看了一会刚开始也是很迷不知道怎么计算。后来自信想想终于明白了。所以就给大家分享一下。
大家不要被它那复杂的计算公式给迷惑了。按步骤的理解理解就可以了。
首先它固定支持位带操作的区:
支持位带操作的两个内存区的范围是:0x2000_0000‐0x200F_FFFF(SRAM区中的最顶1MB)和0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB)
它的位带思路就是把这2个区里边的每一位,也就是每一比特用一个32位的字给重新表示出来,其实给映射差不都。只不过是一个比特映射一个字。你只要把这一点给记住了。理解计算方法就很是简单了。
别名地址=0x2200000+((A-0x20000000)*8+n)*4= 0x22000000+ (A‐0x20000000)*32 + n*4 咱就来一步一步的分析它怎么得来的。
A-0x20000000:获得与0x20000000的字节偏移量。
(A-0x20000000)*8:表示该位在的字节前与0x20000000的第一个位之间有多少位。
(A-0x20000000)*8+n:到这里就算出来与0x20000000的第一位总共偏移的位。
((A-0x20000000)*8+n)*4:以为每一位映射到新的地址空间的时候被作为一个字了。所以他的地址不能单纯的把位的个数当成字节数,而是当成了字数,要想当成字节那就要乘以4,因为每个字里面有4个字节。
0x2200000+((A-0x20000000)*8+n)*4:加上映射过去的首地址,不就是该位映射过去的新的字地址了吗。
我也不知道我理解的对不对希望我们共同交流啊。 |