移植驱动代码时发现工程中使用了如下形式的代码
typedef struct BlkTestTag{
uint16_t
m_u1Var1;
uint8_t reserve[2];
uint32_t
m_u4Var2;
}BlkTest;
uint8_t test_array[8] =
{0x01,0x02,0x00,0x00,0x05,0x06,0x07,0x08};
pblkTest = (BlkTest *)test_array;
u2Var1 = pblkTest->m_u1Var1;
u4Var2 = pblkTest->m_u4Var2;
本意是为了将结构体的值以数组常量形式给出。
让var1 = 0x0201; var2 =
0x08070605
再将这些代码移植到另一款MCU时发现工作不正常。之后发现移植的这款MCU是大端的,而我们之前的使用的MCU都是小端的。于是定位上上面的数组赋值代码。
在小端MCU下会按我们想要的结果来赋值,如下图。Var1和var2的结果是我们想要的。
但是如果再大端MCU上执行的话结果就大不一样。