目录
举个例子
如何验证
小结
在 STM32(基于 ARM Cortex-M 架构)的系统中,默认是小端(Little Endian) 存储方式。也就是说,对于一个整型(例如 32 位 int
),它的最低有效字节(LSB)会存储在内存的低地址处,而最高有效字节(MSB)会存储在内存的高地址处。
举个例子
假设有一个 32 位的 int data = 0x12345678;
-
在小端模式下,内存中的存放顺序从低地址到高地址依次是:
低地址 -> 0x78 0x56 0x34 高地址 -> 0x12
-
如果是大端模式,则会相反(不过 STM32 默认不使用大端模式):
低地址 -> 0x12 0x34 0x56 高地址 -> 0x78
如何验证
可以在代码中进行类似下面的操作,同时下面的代码也可以验证8位的指针指向32位指针的时候,8位指针指向的是32位数据的最低位。
#include <stdio.h>
#include <stdint.h>
int main(void)
{
uint32_t data = 0x12345678;
uint8_t *p = (uint8_t *)&data;
printf("Address of data = %p\n", (void *)&data);
printf("Byte 0 = 0x%02X\n", p[0]);
printf("Byte 1 = 0x%02X\n", p[1]);
printf("Byte 2 = 0x%02X\n", p[2]);
printf("Byte 3 = 0x%02X\n", p[3]);
while (1);
return 0;
}
-
在 STM32(小端模式)下,得到的输出通常为:
Byte 0 = 0x78 Byte 1 = 0x56 Byte 2 = 0x34 Byte 3 = 0x12
由此可以看出,最低有效字节 0x78
存储在最低地址处。
小结
- STM32 默认使用小端序。
- 在内存中,“低地址处存放低有效字节、高地址处存放高有效字节”。