0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是字节序?字节序重要吗?

星星科技指导员 来源:嵌入式计算设计 作者:Colin Walls 2022-06-29 15:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

那是 1981 年(是的——将近 40 年前!),我们正在构建一个系统,其中包含一个 DEC PDP-11 小型计算机,该小型计算机通过共享内存与德克萨斯 TMS990 微处理器接口。这些都是 16 位处理器,所以我们将数据作为字传递。但是发生了一些奇怪的事情:一个 CPU 会将一个值写入共享内存的一个字中,但是当另一个 CPU 读出它时,字节被交换了。解决这个问题很简单:只需在一侧编写一个简单的访问例程来交换字节并确保它始终用于访问共享内存。直到后来才知道为什么会出现这个问题。

在几乎所有现代嵌入式系统中,内存都是按字节组织的。但是,CPU 也可以将数据处理为 16 位或 32 位字。在这种情况下,需要决定如何将字中的字节存储在内存中。有两个明显的选项和许多其他变体。描述此字节顺序的属性称为“字节顺序”(或有时称为“字节顺序”)。

两种常见的字节序形式是:最低有效字节存储在最低地址(“little-endian”)和最高有效字节存储在最低地址(“big-endian”)。字节顺序还有其他变化,甚至还有存储位的可能性。

广义上讲,使用的字节序是由 CPU 决定的。由于有多种选择,因此不同的半导体供应商为其 CPU 选择不同的字节序也就不足为奇了。英特尔 CPU 传统上是小端的。飞思卡尔倾向于支持大端。大多数现代 CPU 的字节序可以在软件中交换。

嵌入式软件工程师的角度来看,问题是“字节序重要吗?” 并且,“如果有,多少钱?”

当软件开发人员需要考虑字节顺序时,大致有两种情况:

通过通信链路或网络传输的数据

在软件中以多种表示形式处理的数据

前一种情况非常简单——只需遵循或定义协议即可。后者更棘手,需要一些思考。

考虑这段代码:

unsigned int n = 0x0a0b0c0d;

unsigned char c, d, *p;

c = (unsigned char) n;

p = (unsigned char *) &n;

d = *p;

c和d最后会包含什么值?无论字节顺序如何,c 都应该包含值 0x0 d。但是,d的值将取决于字节序。在小端系统上d 将包含 0x0 d;在 big-endian 上,它将具有值0x0a。如果要在n 和unsigned char a之间进行联合,则会观察到同样的效果。

那么,这有关系吗?这么多年前,这对我很重要!但是,请注意,大多数代码可能会独立于字节顺序而编写,我认为几乎所有编写良好的代码都是这样的。但是,如果您确实像我需要的那样构建了字节顺序依赖项,那么良好的文档和注释是必不可少的。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    20378

    浏览量

    255618
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11370

    浏览量

    226408
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    东风汽车与字节跳动旗下火山引擎达成战略合作

    4月23日,东风汽车集团有限公司(以下简称东风汽车)与字节跳动旗下火山引擎正式签署战略合作协议。
    的头像 发表于 04-27 10:58 397次阅读
    东风汽车与<b class='flag-5'>字节</b>跳动旗下火山引擎达成战略合作

    Infineon SLE 5542:智能256字节EEPROM芯片的技术剖析

    Infineon SLE 5542:智能256字节EEPROM芯片的技术剖析 在电子设备日新月异的今天,芯片作为核心组件,其性能和功能对设备的整体表现起着关键作用。今天我们要深入探讨的是英飞凌
    的头像 发表于 03-29 10:30 283次阅读

    看手册,9600以下可以直接唤醒,是不丢字节吗?

    看手册,9600以下可以直接唤醒,是不丢字节吗? 9600以上,需要使用高速时钟,这时需要GPIO中断唤醒,这样的时候会丢第一个字节吗?怎么处理呀
    发表于 01-30 07:58

    惠伦晶体助力字节豆包AI眼镜新体验

    近日,行业备受瞩目的“豆包”AI眼镜发布新动态,这款由字节跳动与龙旗科技联合研发的眼镜,搭载自研空间算法芯片,整体重量不足50克,展示了AI眼镜发展的新方向。
    的头像 发表于 01-09 11:23 906次阅读
    惠伦晶体助力<b class='flag-5'>字节</b>豆包AI眼镜新体验

    探索TL16C752D:具有64字节FIFO的双路UART的卓越性能与应用

    探索TL16C752D:具有64字节FIFO的双路UART的卓越性能与应用 在电子设计的广阔领域中,UART(通用异步收发器)作为实现串行通信的关键组件,一直扮演着重要角色。今天,我们将深入探讨TI
    的头像 发表于 12-19 11:50 1190次阅读

    为什么会有小端字节序

    答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。 但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端
    发表于 12-15 06:24

    网络通讯的结构及地址

    { sa_family_tsin_family;// 地址族:必须为AF_INET(IPv4) in_port_t sin_port;// 端口号(网络字节序) struct in_addrsin_addr;// IP地址(网络字节序
    发表于 11-17 07:59

    DBC解析:信号位置与物理值计算

    起始位、位数和字节序定义。在案例中,发动机转速信号的起始位是24,位数是16,摩托罗拉的字节序是24。因此,在收到的原始CAN(FD)报文的64位数据中,在摩托罗
    的头像 发表于 10-31 11:37 720次阅读
    DBC解析:信号位置与物理值计算

    TC334 uart dma发送数据时,只能发送17个字节,怎么解决?

    具体情况:配置串口发送,具体配置情况如下,对于17字节内的数据包能够正常发送,大于17字节的数据包只能发送前17字节。(已做好字节对齐) 请问各位大佬应该怎么解决。
    发表于 08-04 07:18

    USB3014遇到写入字节限制,当写入数据的长度为1024字节或其整数倍时,无法完成写入操作怎么解决?

    关于 USB3014 写入 1024 字节或其整数倍的问题,我了解到以下信息: 文档中提到,如果外部主设备始终写入满数据包(如 1024 字节或其整数倍),则无需使用 PKTEND# 信号
    发表于 07-28 08:28

    STM32407使用串口闲时中断+DMA方式接收最大接收字节是多少?

    使用串口闲时中断+DMA方式接收数据,波特率为460800,DMA接收长度为1024个字节,并开启串口闲时中断,当上位机一次发送520个字节,我发现串口产生了两次中断,第一次接收的最大字节为272
    发表于 07-22 08:16

    LC87F0K08A 8位微控制器8K字节闪存ROM/384字节RAM规格书

    电子发烧友网站提供《LC87F0K08A 8位微控制器8K字节闪存ROM/384字节RAM规格书.pdf》资料免费下载
    发表于 07-17 15:33 0次下载

    usb3014不能写入1024字节的原因?

    Hi,各位专家你们好! 在调试usb3014的时候,遇到了一个问题,FPGA不能写入1024字节的数据(或者1024字节的整数倍数据)到FX3,(我设置DMA buffer大小是1024),按理说
    发表于 07-16 06:52

    开疆智能EtherCAT转CANopen网关连接UV灯配置案例

    一侧波特率,和从站保持一致(如需使用同步周期需要将通讯周期设定一个数值) 设置网关的字节序,下载IP以及掉线后网关的数据处理方式。 完成后点击设备
    的头像 发表于 07-13 11:28 768次阅读
    开疆智能EtherCAT转CANopen网关连接UV灯配置案例

    机智云亮相字节豆包AIoT开源生态沙龙

    近日,字节跳动火山引擎2025原动力大会在北京隆重召开,同期由机智云、火山引擎、扣子发起,联合CSDN、GitCode、广和通、奕斯伟、爱湾学院共同参与的“开源智联·具身同行”字节豆包AIoT开源
    的头像 发表于 06-16 09:50 1216次阅读