《硬件架构的艺术》笔记(七):处理字节顺序

embedded/2024/11/26 20:52:23/

介绍

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

定义

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

访问32位存储器

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

 8位、16位、32位映射。

处理字节顺序不匹配

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

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

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

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

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

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

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

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

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

 地址不变

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

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

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

软件字节交换

交换汇编指令

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

交换库宏

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

协议特定宏

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

限制

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

字节顺序中性代码

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

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

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

字节顺序中性编码指南

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

2)字节交换宏

3)数据传送

4)数据类型

5)位域

6)编译器指令


http://www.ppmy.cn/embedded/140717.html

相关文章

【ChatGPT】ChatGPT在多领域知识整合中的应用

ChatGPT在多领域知识整合中的应用 随着人工智能技术的发展,ChatGPT以其强大的自然语言处理能力,在知识整合和信息生成方面展现出独特优势。通过将多个领域的知识有机结合,ChatGPT不仅能够回答复杂问题,还能帮助用户处理跨学科的任…

开源 AI 智能名片 2+1 链动模式商城小程序:场景驱动的商业创新与用户价值挖掘

摘要:本文围绕开源 AI 智能名片 21 链动模式商城小程序源码,深入分析了场景中的时间、空间、设备、社交和状态五大核心元素。阐述了各元素的表现形式、应用策略及价值,包括时间元素对业务周期和用户行为的影响及相应营销策略;空间…

[蓝桥杯 2021 省 AB2] 小平方

题目描述 小蓝发现,对于一个正整数 nn 和一个小于 nn 的正整数 vv,将 vv 平方后对 nn 取余可能小于 nn 的一半,也可能大于等于 nn 的一半。 请问,在 11 到 n−1n−1 中, 有多少个数平方后除以 nn 的余数小于 nn 的一半。 例如&…

基于边缘计算技术的机器状态监测系统

论文标题:Machine Condition Monitoring System Based on Edge Computing Technology 中文标题:基于边缘计算技术的机器状态监测系统 作者信息: Igor HalenarLenka HalenarovaPavol TanuskaPavel Vazan 作者均来自斯洛伐克布拉迪斯拉发斯洛…

【人工智能】深度学习入门:用TensorFlow实现多层感知器(MLP)模型

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 多层感知器(MLP)是一种基础的神经网络结构,广泛应用于分类和回归任务。作为深度学习的重要组成部分,理解并实现MLP是学习更复杂神经网络模型的基础。本文将介绍多层感知器的核心概念、数学原理,并使用…

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体(union)是一种数据结构,它允许在同一内存位置存储不同的数据类型,但每次只能存储其中一种类型的…

Enhancing K8s Gateway API with Easegress Without Changing a Single Line of Code

In the article “Revolutionize Your Kubernetes Experience with Easegress: Kubernetes Gateway API”, we explored the powerful capabilities of the Kubernetes Gateway API. Today, we will present how to use the flexibility of Kubernetes Gateway to enhance its …

速盾:CDN缓存的工作原理是什么?

CDN(内容分发网络)是一种将内容分发到全球不同地理位置的网络架构,以提供更快速、可靠的内容传输。其核心原理是利用缓存技术,将数据内容分布到离用户最近的边缘节点上。当用户请求内容时,CDN将根据用户的IP地址&#…