首页 > 其他分享 >【《硬件架构的艺术》读书笔记】07 处理字节顺序

【《硬件架构的艺术》读书笔记】07 处理字节顺序

时间:2022-12-20 23:24:24浏览次数:60  
标签:小端 顺序 字节 读书笔记 存储器 模式 地址 07

7.1 介绍

 本章主要介绍字节顺序的的基本规则。(感觉偏软件了,不知道为啥那么会放进《硬件架构的艺术》这本书)。

7.2 定义

 字节顺序定义数据在计算机系统中的存储格式,描述存储器中的MSB和LSB的位置。对于数据始终以32位形式保存在存储器中的真32位系统,字节顺序没有实际意义,若要将字节或16位半字映射到存储器中32位字的系统,字节顺序不匹配就会影响数据的完整性。

大端模式:将MSB保存在最低存储器地址处。

小端模式:把LSB保存在最低存储器地址处。

下面是将0xAABBCCDD分别以大端和小端模式保存在存储器中。字节0表示最低存储器地址。

 

 下面是两种模式对应存储器地址:

 

 上面的是按字节形式处理数据,若按照半字处理数据时:

 

 7.3 大端或小端模式:哪个更好

小端模式:首先访问最低位字节,访问其他字节数的汇编语言指令能按同样方式处理所有格式。地址偏移量和字节数1:1,多精度的数学程序也相对容易编写。

大端模式:首先访问高字节,容易判断正负,无需接收所有字节包就能知道符号信息。二进制转十进制程序特别有效。

 

 大端模式读取和转储16进制很容易,因为通常从低地址读到高地址。

常用计算机系统字节顺序:

 

 双字节顺序:可以在大端或小端模式间切换。

大多数嵌入式通信系统使用大端模式,因为这些处理器所写的老程序通常遵循网络字节顺序(大端模式)。

常用文件格式和其字节顺序:

 

 所以写入文件时,需要知道文件结构是怎样的,如大端模式机器些如小端文件,需要将字节顺序反转。

某些CPU可以设置处理器的控制寄存器切换为大端或小端(双字节)模式。

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

TCP/IP族中的所有协议层都定义为大端模式,有时称为“网络字节顺序”。即使各终端计算机都是小端的,它们之间所传输的数据必须在通过网络传输之前转化成网络字节顺序,再在接收端转成小端模式。

7.5 访问32位存储器

字节地址和32位数据总线上特定位的关系:

 

 8位、16位、32位映射。

 

 7.6 处理字节顺序不匹配

(这里标题和7.4都是一样的)

最简单方法:为系统选择一种“字节顺序类型”(大端小端里选一种),并将其他所有不同字节顺序模块转化成为目标自己顺序类型。

推荐目标的字节顺序类型与处理器的字节顺序类型相匹配。对第三方IP选型时要考虑的另一个因素就是确认其是否支持“双字节顺序”结构,以使IP可以方便的编程为大端模式或小端模式,以便与系统无缝集成。万一没有可编程选项,就需要将IP集成到SoC的过程中解决字节顺序不匹配问题。

两种连接相反字节顺序外设方法:将地址保持稳定或将位顺序保持稳定。

7.6.1 保持数据完整性(数据不变,地址变)

数据进位始终时从低位开始进到高位,这个对于大端和小端都是一样的,这种操作的顺序必须保留。

 图中系统中小端外设接收连续帧并将接收到的数据通过DMA/CPU保存到系统存储器,这里存储器、CPU和DMA都是大端模式。首先接收到连续帧的头部,然后是帧的其余部分。

 

 图中使用数据不变性将小端存储器连接到大端上,为了保证数据位顺寻保持不变,可以直接对访问外设RAM的存储器的地址进行修改,对地址的改动基于要传送数据的大小。映射关系如下图。

 

 根据上面逻辑可以编写HDL代码:

 

 7.6.2 地址不变

某些应用程序或系统不需要数据保持特定的次序,但是需要在字节顺序转换后字节数据保持在同样的地址区域,这里就需要使用地址不变的字节顺序转换。

这种方法不改变地址,而是直接改变数据。代码:

 

 

图中使用地址不变性将小端存储器连接到大端上(感觉这里上面的地址应该不变才对呀)。

7.6.3 软件字节交换

交换汇编指令

某些微控制器的指令集包含预定义的交换函数,软件可直接使用于实现针对特定应用的字节顺序转换。

交换库宏

某些软件程序语言同样提供了内置宏以在应用中对字节顺序转换实现字节交换。

协议特定宏

所有通信协议必须定义协议的字节顺序,以使两端节点知道如何通信。

限制

软件中实现交换功能会增加额外的开支。

7.7 字节顺序中性代码

避免由字节顺序所引发的问题的最好方式是在设计中使用字节顺序中性。

两种途径:1、将字节顺序选项作为软件可配置的选项。

2、设计(IP)中使用字节使能,并把解码的任务留给系统或者SoC。

7.8 字节顺序中性编码指南

1)数据存储和共享存储体——数据必须独立于顺序体系结构的格式保存。

2)字节交换宏

3)数据传送

4)数据类型

5)位域

6)编译器指令

标签:小端,顺序,字节,读书笔记,存储器,模式,地址,07
From: https://www.cnblogs.com/magnolia666/p/16993788.html

相关文章

  • 字节地址和位地址有什么区别?
    区别: 1、存储单片机中的存储器通常以字节(8bit)为单位来进行组织,即每一个字节有一个地址,通过“字节”地址可以访问到存储器中的任何一个字节,这是最常见的形式。问题当中......
  • 数据传输 | DTLE Release Notes 详细解读 2.19.07.0
    2.19.07.0版本DTLEReleaseNotes以下对DTLE2.19.07.0版本的ReleaseNotes 进行详细解读。文章主要分为三部分内容:一、DTLE项目介绍二、改进/产品特点三、Bug修复......
  • 第07期:有关 MySQL 字符集的 SQL 语句
    本篇为理清字符集的续篇​​(上一篇:第06期:梳理MySQL字符集的相关概念)​​,重点讲述字符集涉及到的sql语句用法。一、characterintroducer翻译过来就是字符引导。也就是针......
  • C语言各数据类型所占字节数
      编写C程序时需要考虑每种数据类型在内存中所占的内存大小,即使同一种数据类型在不同平台下所占内存大小亦不相同。为了得到某个类型在特定平台上的准确大写,可以使用s......
  • Wallys/Qualcomm IPQ5018 solution application wifi6 , support M.2 Card Slot for Q
    IPQ5018,802.11ax,wifi6e,QCN9074,2X22.4Gsupport2xWiFi6ECardsupportBT5.1/Dual-coreARM64bitA53@1.0GHzProcessor512MBDDRL3LSystemMemory4MBNORFlash,......
  • java JVM和class字节码版本对照表
    链接前往JDKVersionBytecodeVersionJava1.045.0Java1.145.3Java1.246.0Java1.347.0Java1.448.0Java549.0Java650.0Java7......
  • 【JAVA笔记】JAVA的Scanner类、String类的判断功能、String类的获取功能、String类的
    一、Scanner类1、说明:Scanner类主要用于扫描用户从控制台输入的文本,即当用户需要输入数据时,调用java.util包中的Scanner类,Scanner类能获取用户所输入的数据。如何使用Sc......
  • 轻松看懂Java字节码
     计算机只认识0和1。这意味着任何语言编写的程序最终都需要经过编译器编译成机器码才能被计算机执行。所以,我们所编写的程序在不同的平台上运行前都要经过重新编译才能被执......
  • 字节跳动官方出品,超级好用还能自定义
    大家好我是老鱼~在项目开发过程中,​​图标​​是永远绕不开的话题。今天大师兄就和大家来聊一聊~图标库现状问题图标​​数量少​​难以满足产品项目需求的,或遇到缺失图标......
  • java 字节流和字符流的区别
    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用......