FIFO和大端小端

大端小端问题真是困扰了我很久,从业都第10年了,从事软件也5年了,每次遇到大端小端都得百度一下,再从头理解一下。我记录了好多晦涩难懂的话,比如:

1.小端:信号的高位放在高字节的高位,信号的低位放在低字节的低位。

2.大端:信号的高位放在低字节的高位,信号的低位放在高字节的低位。

从这两句话中我最大的理解就是,小端的bit顺序和寄存器的顺序相同。大端的bit顺序和寄存器相反。

然后我们看看下面的例子是大端还是小端:这里是一个FIFO缓存结构,地址是向下生长的。

AddressData
S0076P1 MSB
S0077P1 LSB
S0078P2 MSB
S0079P2 LSB
S0080P3 MSB
S0081P3 LSB
。。。
。。。

从这个例子中可以看出数据的高位在低地址,数据的低位在高地址,是大端。

我们再看看小端的样子:

AddressData
S0076P1 LSB
S0077P1 MSB
S0078P2 LSB
S0079P2 MSB
S0080P3 LSB
S0081P3 MSB
。。。
。。。

从这个例子中可以看出数据的高位在高地址,数据的低位在低地址,是小端。

所以我经常说小端是看着顺眼的,大端是看着别扭的。STM32就是小端的存储方式,飞思卡尔5604就是大端的存储方式。

再看一个例子

寄存器1514131211109876543210
小端1000100010001000
大端1000100010001000

寄存器bit方向如图所示,里面的数据排列如图所示,但是小端和大端读出来的数却是不一样的,小端读出来的数是0x8888,大端读出来的数是0x1111。

小端就相当于是0x8888的高位MSB开始从寄存器的BIT0开始向左移位,移位到BIT15;

大端就相当于是0x1111的高位MSB开始从寄存器的BIT15开始向右移位,移位到BIT0;

希望我这次没有理解错,对初学者也能有所帮助。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值