STM32和C51的大端模式与小端模式

目录

      • 小段模式(Little Endian)
      • 大端模式(Big Endian)
      • C51使用大端模式
      • STM32使用小段模式
      • 使用代码验证大小端模式

在大多数微处理器架构中,在一个地址单元仅存储一个字节(8bit)的数据。大部分的数据类型(比如uint16、uint32、string等)在存储时,需要拆分为单个字节存放在连续的地址单元中。

当存放多个字节数据时,字节的顺序和地址单元的增长方向,会存在两种不同的标准。

小段模式(Little Endian)

小段模式(Little Endian),也称为Intel顺序。最低有效字节,首先存储。

例如:int16数据0x1234在地址单元中的存储顺序为

地址 +0 +1
内容 0x34 0x12

例如:int32数据0x57415244在地址单元中的存储顺序为

地址 +0 +1 +2 +3
内容 0x44 0x52 0x41 0x57

大端模式(Big Endian)

大端模式(Big Endian),也称为Motorola顺序。最高有效字节,首先存储。

例如:int16数据0x1234在地址单元中的存储顺序为

地址 +0 +1
内容 0x12 0x34

例如:int32数据0x004A4F4E在地址单元中的存储顺序为

地址 +0 +1 +2 +3
内容 0x00 0x4A 0x4F 0x4E

C51使用大端模式

C51编译器中使用标准的C语言数据类型时(int, long等),使用大端模式;

STM32使用小段模式

STM32编译器,默认使用小段模式;

使用代码验证大小端模式

可以使用以下代码验证编译器使用的是哪种模式:

char x0,x1;
uint16 value = 0x1234;

x0=((char*)&x)[0]; //低地址单元
x1=((char*)&x)[1]; //高地址单元

/* 如果x0 = 0x34,编译器为小端模式 */
/* 如果x0 = 0x12,编译器为大端模式 */

你可能感兴趣的:(#,STM32系列,C51,STM32,大端模式,小端模式)