《电子技术应用》
您所在的位置:首页 > 模拟设计 > 业界动态 > 例说MCU的端模式

例说MCU的端模式

2015-05-28

      端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。

  下表说明了一个32位的数据在大端模式及小端模式下按字节存储的先后顺序(HH表示32位数据的最高字节,LL则为最低字节):

  由上表可以看出,在大端模式中,一个多字节数据按从高字节到低字节的顺序存储,而在小端模式中则相反。在实际应用当中,不同的处理器采用的端模式也不一样,为了让大家更简单地理解以及引起大家足够的重视,下面我分别以STM32F103和STM8S103K4来做一个简单的实验。

  定义一个结构体类型如下图:

  在中编写如下程序:

  [说明]: 以上只是工程中截取的部分代码,完成的工程在附件当中,附件地址在审核后将会在文章回贴中提供给大家。

  仿真结果-端模式转换前直接进行结构体到数组的内存复制的结果:

  仿真结果-端模式转换后进行结构体到数组的内存复制的结果:

  在STM32F072中编写如下程序(结构体定义与前文所述一致):

  [说明]: 以上只是工程中截取的部分代码,完成的工程在附件当中,附件地址在审核后将会在文章回贴中提供给大家。

  仿真结果-端模式转换前直接进行结构体到数组的内存复制的结果:

  仿真结果-端模式转换后进行结构体到数组的内存复制的结果:

  由以上实验我们通过对比和STM32F072在未进行端转换前内存复制的结果得出结论:

  1. 采用的是大端模式,即32位或16位数据按照从高字节到低字节的顺序存储在内存当中。

  2. STM32F072采用的是小端模式,即32位或16位数据按照从低字节到高字节的顺序存储在内存当中。

  由此也证明了前文中的说法,不同的处理器采用的端模式可能不一样。也正因为此,我们在编写某些外部设备驱动的时候或者有关通信协议的驱时应该把端模式考虑进去,要进行转换可以参考下面的代码:

  当然,你可以选择不进行端模式的转换,而直接通过按字节的方式来存储,但这样的话很多时候会大大地降低您代码的效率,这里就不多作解释了。

  [特别说明]: 在上文及上文的图中有些地方注释说的是端模式的转换,并不是指把的端模式进行转换。


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。