新闻中心

EEPW首页>嵌入式系统>牛人业话> 例说MCU的端模式

例说MCU的端模式

—— 基于STM8S105K4和STM32F072RB
作者:veiko 时间:2015-05-11 来源:电子产品世界 收藏

  端模式,大端,小端是什么?没有用到的话,相信你也不一定清楚。我第一次接触是在UART发送结构体数据的时候,说到这里你也许猜到了一些。

本文引用地址://m.amcfsurvey.com/article/273944.htm

  端模式(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位数据按照从低字节到高字节的顺序存储在内存当中。

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

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

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

  请在文章中下部增加如下信息:

  基于STM32F072的端模式例子:http://share.eepw.com.cn/share/download/id/372958

  STM8大小端例程:http://share.eepw.com.cn/share/download/id/372957

逆变器相关文章:逆变器原理


可控硅相关文章:可控硅工作原理


逆变器相关文章:逆变器工作原理


比较器相关文章:比较器工作原理




关键词:MCUSTM8S105K4

评论


相关推荐

技术专区

关闭