端形式,大端,小端是什么?没有用到的话,相信你也不一定清楚。我第一次触摸是在UART发送结构体数据的时分,提到这儿你或许猜到了一些。
端形式(Endian)的这个词出自Jonathan Swift书写的《格列佛行记》。这本书依据将鸡蛋敲开的办法不同将所有的人分为两类,从圆头开端将鸡蛋敲开的人被归为Big Endian,从尖头开端将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是终究从大头(Big-Endian)敲开仍是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也简直引起一场战役。在计算机业界,Endian表明数据在存储器中的寄存次序。下文举例阐明在计算机中巨细端形式的差异。
下表阐明晰一个32位的数据在大端形式及小端形式下按字节存储的先后次序(HH表明32位数据的最高字节,LL则为最低字节):
由上表能够看出,在大端形式中,一个多字节数据按从高字节到低字节的次序存储,而在小端形式中则相反。在实践使用傍边,不同的处理器选用的端形式也不一样,为了让咱们更简略地了解以及引起咱们满足的注重,下面我别离以STM32F103和STM8S103K4来做一个简略的试验。
界说一个结构体类型如下图:
在STM8S105K4中编写如下程序:
[阐明]: 以上仅仅工程中截取的部分代码,完结的工程在附件傍边,附件地址在审阅后将会在文章回贴中提供应咱们。
仿真成果-端形式转化前直接进行结构体到数组的内存仿制的成果:
仿真成果-端形式转化后进行结构体到数组的内存仿制的成果:
在STM32F072中编写如下程序(结构体界说与前文所述共同):
[阐明]: 以上仅仅工程中截取的部分代码,完结的工程在附件傍边,附件地址在审阅后将会在文章回贴中提供应咱们。
仿真成果-端形式转化前直接进行结构体到数组的内存仿制的成果:
仿真成果-端形式转化后进行结构体到数组的内存仿制的成果:
由以上试验咱们经过比照STM8S105K4和STM32F072在未进行端转化前内存仿制的成果得出结论:
1. STM8S105K4选用的是大端形式,即32位或16位数据依照从高字节到低字节的次序存储在内存傍边。
2. STM32F072选用的是小端形式,即32位或16位数据依照从低字节到高字节的次序存储在内存傍边。
由此也证明晰前文中的说法,不同的处理器选用的端形式或许不一样。也正因为此,咱们在编写某些外部设备驱动的时分或许有关通信协议的驱时应该把端形式考虑进去,要进行转化能够参阅下面的代码:
当然,你能够挑选不进行端形式的转化,而直接经过按字节的方法来存储,但这样的话许多时分会大大地下降您代码的功率,这儿就不多作解说了。
[特别阐明]: 在上文及上文的图中有些当地注释说的是端形式的转化,并不是指把MCU的端形式进行转化。
请在文章中下部添加如下信息:
根据STM32F072的端形式比如:http://share.eepw.com.cn/share/download/id/372958
STM8巨细端例程:http://share.eepw.com.cn/share/download/id/372957