源程序如下:
i = 0x12345678;
printf("\r\ni = 0x%X,",i);
printf("addri = 0x%X,",&i);
printf("\r\naddru8i = 0x%X,",(u8*)(&i));
printf("u8i = 0x%X,",*((u8*)(&i)));
printf("\r\naddru8i+1 = 0x%X,",(u8*)(&i)+1);
printf("u8i+1 = 0x%X,",*((u8*)(&i)+1));
printf("\r\naddru8i+2 = 0x%X,",(u8*)(&i)+2);
printf("u8i+2 = 0x%X,",*((u8*)(&i)+2));
printf("\r\naddru8i+3 = 0x%X,",(u8*)(&i)+3);
printf("u8i+3 = 0x%X,",*((u8*)(&i)+3));
printf("\r\nTP_test:end");
串口打印出的數據如下:
i = 0x12345678,addri = 0x2001A08C,
addru8i = 0x2001A08C,u8i = 0x78,
addru8i+1 = 0x2001A08D,u8i+1 = 0x56,
addru8i+2 = 0x2001A08E,u8i+2 = 0x34,
addru8i+3 = 0x2001A08F,u8i+3 = 0x12,
通過以上分析,我們知道,低位數據0x78存儲在低地址0x8C,而高8位數據0x12存儲在高位字節0x8F處,所以數據處理的模式是小端模式。
大小端模式的區別:
大端模式:是指數據的高字節,保存在內存的低地址中,而數據的低字節,保存在內存的高地址中。ARM/PowerPC等處理器採用大端模式。但cortex-M系列應該是小端模式,其他stm32f446這款芯片是小端模式。
小端模式:是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中。Intel架構處理器採用小端模式。
如一個數據:0x12345678;對應內純地址是0x00~0x03。
模式 | 大端模式 | 小端口模式 | ||||||
地址 | 0x00 | 0x01 | 0x02 | 0x03 | 0x00 | 0x01 | 0x02 | 0x03 |
數據 | 0x12 | 0x34 | 0x56 | 0x78 | 0x78 | 0x56 | 0x34 | 0x12 |