《 硬件架构的艺术》笔记(七)

处理字节顺序

7.1 介绍

        字节顺序描述如何在计算机系统中表示由多个字节组成的数据。当程序或数据在不同字节顺序的片上系统(SOC) 间传输时就会面对这样的问题,除非所有计算机系统按同样的字节顺序设计。

7.2 定义 

        字节顺序定义数据在计算机系统中的存储格式。它描述存储器中地址的最高有效位MSB和最低有效位LSB的位置。

  • 大端模式(Big Endian):将MSB保存在最低存储器地址处
  • 小端模式(Little Endian):将LSB保存在最低存储器地址处

 7.3 大小端的特点

        小端模式:因为最低位字节偏移值为0,并首先访问,访问1、2、4或更长字节数的汇编语言指令能按同样方式处理所有格式,而且由于地址偏移量与字节数1:1的关系,多精度的数学程序也相对容易编写。

        大端模式:因为先访问高阶字节,所以很容易通过查看偏移量为0的字节来判断数值的正负,所以无须接收所有字节包就能知道符号信息。由于数字同时也以打印的次序保存,所以对从二进制转化为十进制的程序有效。大端模式读取和转存

例如:以两种不同形式保存十六进制数0x12345678。

         大多数位图图像(显示和内存安排)映射成“MSB在左侧”的方案即大端方式,可以使体系结构能够自然地移动和存储大于一个字节的图像元素。

 7.4 处理字节顺序不匹配问题

        在两台设备通信时,每个处理器和每种通信协议必须选择一种字节顺序,如果需要通过存储器通信,两种不同字节顺序的处理器就会产生冲突。例如:小端模式处理器访问大端模式网络时需要用软件对字节重新排序。
        而TCP/IP所有的协议层都定义为大端模式,即如(IP地址、包或校验和)必须首先发送或接收最高有效字节),所以即使各终端计算机都是小端模式,之间所传输的数据必须先转化为大端模式,然后在接受端转化为小端模式。

处理方法:

  1. 处理字节顺序不匹配最简单的方法就是为系统选择一种“字节顺序类型”,并将全部其他不同字节顺序的模块转化为目标“字节顺序类型”。而字节顺序类型由CPU体系结构的实现决定,所以在对第三方IP选型时要考虑是否支持“双字节顺序”结构,方便编程为“大端模式”或“小端模式”。
  2. 保持数据完整性(数据不变,改变地址)
    域左边为MSB,右边为LSB。即如果用16位域表示整数并进行加操作,会对LSB加1,并且所有进位从LSB向MSB进行,大端或小端地址体系结构是相同的。
    首先接收到连续帧的头部,然后是帧的其余部分

         接收到的连续帧以“Type”、“H2"、”H1"和“H0"的顺序保存在外设存储器中。帧中的域可能跨多个字节并不在字节边界终止。

        需要对访问外设RAM的存储器的地址进行修改,对地址的改动基于传送数据的大小。

所以即对地址总线最后两位LSB取反,数据不变。

使用上面的方案可以使字节顺序转换对软件透明,并能确保数据完整性在字节顺序转换过程中不会被破坏
该方法的数据流:
        1、DMA发出对外设存储器的读字节操作
        2、此时系统产生的地址为0x00,但是小端模式设备所看到的地址为0x03
        3、设备存储器对该地址解码,访问位31:24
        4、DMA对系统的大端模式存储器发出按字节方式的写操作
        5、产生0x00地址(字节访问)
        6、大端模式存储器将该访问解码为写入位31:24
        7、由于来自于小端模式存储器的数据处于同样的字节区域,所以可以保持数据的完整性。

  3.保持相同的地址区间(地址不变,改变数据)

        某些应用程序或系统不需要数据保持特定的次序,但是需要在字节顺序转换后数据字节保持在同样的地址区域,这时需要使用地址不变的字节顺序转换。
对于地址不变的系统,访问字节”Type“的地址偏移量永远是0x3,而如果使用上一节的方法,访问该字节需要使用不同的地址偏移量。需要修改或交换从外设RAM存储器中读到的数据值。

  4. 软件字节变换

  • 交换汇编指令

  • 用于交换字节的软件库宏

  • 协议特定的交换函数

  • 制定的交换函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值