大端小端与MSB和LSB

大端(Big-endian):数据的高位字节存放在地址的低端 低位字节存放在地址高端;
小端(Little-endian):数据的高位字节存放在地址的高端 低位字节存放在地址低端
举个简单而又容易理解的例子:
uint_16 temp = 0x12345678;
地址大端小端0
0x000010x120x78
0x000020x340x56
0x000030x560x34
0x000040x780x12
其中的地址,一般由编译器分配,也可在程序中自行指定。从上表中,可以清晰的看到,大小端是以字节为单位进行数据储存的方式。大端通俗的理解就是赋值数从左自右;小端则是从右自左。
而与大小端类似的,还有MSB和LSB存储方式。
LSB(Least Significant Bit),意为最低有效位;
MSB(Most Significant Bit),意为最高有效位。

通常,一个芯片的管脚中,对于一个多比特的信号,比如32根的地址线,从低开始按0到31编个号。MSB就是31,LSB就是0。那么如果标记为:ADDR[31:0]就是MSB first的方式,如果标记为ADDR[0:31]就是LSB first的方式。LSB和MSB是以机器码为单位进行排序。

这样就可以显而易见看出,大小端和LSB MSB本质区别是在排序的单位不同,在芯片中应当留意寄存器是否有LSB或者MSB的字样,有的话应当对数据的序列进行改写,这几天就被这坑,坑了一段时间,因为之前一直没有接触过LSB和MSB,可是接触过大小端的概念,先入为主的想法,让我在一个简单的问题困扰许久。现在才发现理论知识是相当重要,特别是许多数据手册上它们对一些常识是有时候没有进行说明的,因此,这就需要我们平时多积累,网上也是没有大神特别整理这些常识性的东西。开源资料较少,这个我感觉就是硬件编程比软件编程比较明显鸡肋的地方吧。。。

没有更多推荐了,返回首页