大小端:
大端存储:低字节数据存放在高地址,高字节数据存放在低地址
小端存储:低字节数据存放在低地址,高字节数据存放在高地址
STM32F101xx和STM32F103xx仅支持小端模式,虽然Cortex-M3是大小都支持的。
判定方式
一、利用联合体
在union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。
联合体变量的各个成员都是从低字节开始公用的。即:所有的成员都是从低字节开始的
即上述的union虽然定义了两个成员,但其实这个union只占用了4个字节(32位机器中),往a成员赋值,然后读取b就相读取a成员的低位第一个字节的值。如果机器使用大端模式,则u.a=1那a的最高字节值为1;
如果机器使用小段模式,则u.a=1则a的最低位字节为1。上述可知b和a有相同的起始位,所以读取b如果等于1,则为小端模式,b为0则为大端模式
typedef union {
int i;
char c;
}my_union;
int checkSystem1(void)
{
my_union u;
u.i = 1;
return (u.i == u.c);
}
二、强制类型转换
void port()
{
int a = 1;
int b = (char)a;
if(1 == b)
printf("小端\n");
else
printf("大端\n");
}