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

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

3天内不再提示

一文详细了解单片机的大小端模式

GReq_mcu168 来源:玩转单片机与嵌入式 作者:玩转单片机与嵌入 2022-02-16 17:44 次阅读

一:什么是大小端?

咱们中文中常常提到的大小端的英文名字为“endianness”,英文直译的意思是“字节序”,是内存中存储数据的字节顺序。在这里一定要记住是“字节的顺序”,应为在计算机系统中,都是以字节为单位的,每个地址单元都对应一个字节,即8bit。

C语言系统中,除了8bit的char类型,还有16bit的short类型、32bit的long类型。对于超过8bit的数据的存储,必然存在存在如何将多个字节排序的问题,因此就导致了大端存储模式和小端存储模式。

如果系统是大端,则首先存储 MSB 字节,即高字节存储在低地址;若系统是小端,则首先存储LSB字节,即低字节存储在低地址。

针对这两种模式,我常用的记忆宫殿方法是:“小弟弟”,即小端系统的低字节存储到低地址,大端则反之。

二:详解大小端模式

假设,需要存储的32bit的数据为:0x11223344。

一文详细了解单片机的大小端模式

对于大端模式:低位地址存储着高字节的数据。

一文详细了解单片机的大小端模式

对于小端系统:低位地址存储着低字节的数据。

一文详细了解单片机的大小端模式

在一些MCU中,可以通过软件将一种字节序切换为另一种字节序,即可以通过软件配置的形式选择大端模式还是小端模式。

如笔者使用过的一款瑞萨单片机支持字节序选择。

一文详细了解单片机的大小端模式

三:如何判断单片机的大小端模式?

若想要知道自己使用的单片机是大端或小端模式,可以通过下方的代码进行判断。

//检查大小端模式,大端模式返回true;小端模式返回falsebool CheckisBigEndian(void){    uint32_t u32RawData;    uint8_t *pu8CheckData;    u32RawData = 0x11223344; //Assign data    pu8CheckData = (uint8_t *)&u32RawData; //Type cast    if (*pu8CheckData == 0x44) //check the value of lower address    {        return false;    }    else if (*pu8CheckData == 0x11) //check the value of lower address    {        return true;}}

四:大端模式与小端模式怎么转换?

我们可以使用 下面的算法将大端模式转换为小端模式,反之亦然。

//Function to change one endian to anotheruint32_t ChangeEndianness(uint32_t u32Value){    uint32_t u32Result = 0;    u32Result |= (u32Value & 0x000000FF) << 24;    u32Result |= (u32Value & 0x0000FF00) << 8;    u32Result |= (u32Value & 0x00FF0000) >> 8;    u32Result |= (u32Value & 0xFF000000) >> 24;    return u32Result;}

五:STM32是大端还是小端模式?

从下图中关于STM32的手册介绍中可发现:我们常用的STM32单片机符合“小弟弟”的存储逻辑,属于小端系统;

一文详细了解单片机的大小端模式

原文标题:超全面讲解单片机的大小端模式

文章出处:【微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红


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

    关注

    6002

    文章

    43980

    浏览量

    620888
  • 计算机
    +关注

    关注

    19

    文章

    6652

    浏览量

    84565
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128813

原文标题:超全面讲解单片机的大小端模式

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机变量存储大小由什么决定?

    最近看到群友在讨论【单片机变量存储大小由什么决定?】的话题。
    的头像 发表于 01-26 10:11 279次阅读
    <b class='flag-5'>单片机</b>变量存储<b class='flag-5'>大小</b>由什么决定?

    带您一起详细了解IEEE802.3bt(PoE++)的有关特点

    Hqst华强盛(盈盛电子)导读:带您一起详细了解IEEE802.3bt(PoE++)的有关特点,让我们对IEEE802.3bt(PoE++)协议有更具体的了解
    的头像 发表于 01-04 11:26 628次阅读
    带您一起<b class='flag-5'>详细了解</b>IEEE802.3bt(PoE++)的有关特点

    单片机按键切换模式命令

    单片机按键切换模式命令是指在单片机系统中,通过按下按键来切换系统工作模式的命令。这种命令通常用于控制系统的状态和功能,使系统能够根据用户的需求进行灵活的切换,提供多种工作
    的头像 发表于 12-15 10:31 1222次阅读

    单片机按键切换模式怎么设置

    单片机作为一种微处理器,在各种嵌入式系统中扮演着核心控制器的角色。其中,按键输入作为单片机控制中常见的交互方式,实现模式切换是常见的需求。本文将详细介绍如何在
    的头像 发表于 12-13 11:07 1622次阅读

    单片机进入掉电模式,怎么降低整体功耗?

    单片机系统在单片机进入掉电模式下,待机电流达到了200多uA,如果进入待机前将单片机所有I/O口置为低电平,待机电流达到10uA以下,但是无法唤醒
    发表于 11-06 07:06

    怎么确定单片机堆栈大小

    怎么确定单片机堆栈大小,例如51stack的大小怎么预留?其他单片机的不同之处,及与ARM区别
    发表于 11-02 06:36

    开发单片机下位需要对编译器很了解吗?

    如题所说,单片机下位程序编写,需要对编译器很了解吗。 对单片机这种程序来说,都有哪些编译器编译代码。
    发表于 10-23 06:22

    单片机与迪DGUS屏通信例程之界面源文件

    资料简介:该源码是基于迪DGUS屏与STC15系列单片机通信实战例程的迪DGUS屏界面设计源码,用CorelDRAW X4软件设计,请使用相同版本软件或更高版本软件打开,关于该教程的详细
    发表于 10-09 08:56

    基于迪DGUS屏与STC15系列单片机通信实战例程

    资料简介:该源码是基于迪DGUS屏与STC15系列单片机通信实战例程的完整教程PDF档,方便大家下载保存到电脑上离线查看
    发表于 10-09 07:43

    单片机如何增大电流?电流大小与什么有关?

    单片机如何增大电流?电流大小与什么有关?  单片机是一种嵌入式系统,是一种微处理器,可以控制电子设备,如电子元器件、机械和电动设备等,来满足特定需要。作为电子设备的一种核心部件,单片机
    的头像 发表于 09-28 16:46 2253次阅读

    单片机原理及应用详解

    详细地介绍了MCS-51单片机的硬件结构、指令系统,从应用的角度介绍了汇编语言程序设计与各种硬件接口设计、各种常用的数据运算和处理程序、接口程序以及MCS-51单片机应用系统的设计,并对MCS-51
    发表于 09-25 07:02

    单片机大小端转换的几点小技巧

    单片机大小端转换的几点小技巧
    的头像 发表于 09-18 10:58 812次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>大小</b>端转换的几点小技巧

    8051单片机和PIC单片机的区别是什么

    8051单片机和PIC单片机都属于单片机的一种,8051单片机和PIC单片机在不同的架构和不同的指令集、速度、转换、内存、功耗、总线宽度等方
    的头像 发表于 07-07 11:31 1535次阅读

    请问新唐USB系列的单片机在PC有没有相应驱动程序,只要调用API就能和单片机通讯?

    请问新唐USB系列的单片机在PC有没有相应驱动程序,只要调用API就能和单片机通讯?不想再用HID的方法了,省事点~
    发表于 06-20 07:11

    单片机做红外线的接收可行么?

    现在手边有个红外线控制的设备,现有的控制模式就是常规的 遥控器->红外接收头->设备。 改装之后想达到的效果是 手机或网页->单片机(8266)-&
    发表于 06-02 14:08