打印

位带的计算,不知道我的理解对吗,希望大家一块交流啊。

[复制链接]
272|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
道子|  楼主 | 2018-7-30 12:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天我看来看关于位带的操作啊,自己有了点想法。其它低处理器里面没有位带操作。而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:加上映射过去的首地址,不就是该位映射过去的新的字地址了吗。


       



        我也不知道我理解的对不对希望我们共同交流啊。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

443

主题

448

帖子

0

粉丝