大小端定义:
大端格式:即数据的高位存在低地址,如0x11223344,在存储器中从低到高的存储顺序就是0x11,0x22,0x33,0x44
小端格式:即数据的高位存在高地址,如0x11223344,在存储器中从低到高的存储顺序就是0x44,0x33,0x22,0x11
大端格式会更好理解一点,因为它是顺序的;小端格式会需要转换一下。
STM32的内存和flash都是按照小端格式存储的。
如何判别大小端:
1.判别RAM的大小端
方法1:定义一个32位变量,给其赋值0x11223344,再定义一个8位指针,将其指向32位变量的首地址,再打印出该指针所指向位置的内容,如果是0x44则为小端,反之则为大端,如下:
int datatt=0x11223344;
u8 *ptr=(u8 *)&datatt;
printf("ptr=%x\n",ptr[0]);
方法2:定义一个联合体:
union test_union
{
u8 data_byte[4];
u32 data_int;
}
给其中的 data_int 赋值0x11223344,然后再打印出 data_byte[0],如果是0x44即为小端格式,反之则为大端。
2.判别flash的大小端
将上述方法1中的32位变量改为只读的(全局变量),其余操作一样;因为只读变量是存储在flash中的。