1 大小端存储含义
对于整型变量int a = 0x12345678
,其在内存中有两种存储方式:
▲ 大小端存储含义
- 小端存储(Little Endian):变量的低字节存储在内存低地址(
0x12345678
的LSB<0x78
>存在内存中的低地址) - 大端存储(Big Endian):变量的高字节存储在内存低地址(
0x12345678
的MSB<0x12
>存在内存中的低地址)
一般的arm芯片都是默认使用小端存储模式,对于CM3,可以使用REV/REVH等相关指令反转字节序,来完成端模式的转换。
注意:在CM3中,存储模式是在复位时确定的,且运行时不可更改。并且指令预取永远使用小端模式,在配置控制存储空间的访问也永远使用小端模式(包括NVIC
, FPB
等)。另外,外部私有总线地址区0xE0000000至0xE00FFFFF也永远使用小端模式。
2 测试STM32的大小端
int a = 0x12345678;
char b[4];
int main(void)
{
for (int i = 0; i < 4; i++){
b[i] = *((char*)&a + i);
}
}
▲ 利用指针验证STM32是小端存储
因此,STM32默认使用小端存储。
当然,也可以用联合体来测试:
union B_t{
char b[4];
int a;
};
union B_t B;
int main(void)
{
B.a = 0x12345678;
}
▲ 联合体验证STM32是小端存储
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)