指针强制转换与字节对齐
- 由于涉及到网络报文的解析,在数据处理的时候,会用到指针强制转换,目前换了一个芯片,指针强制转换就出现了问题。
以下直接贴代码了,会注明,哪一种是ok的,哪一种会导致ECU reset。
//这个会导致问题。
void fun_a(void){
static uint8 data[8] = {0};
uint16 value = 0;
value = *(uint16*)&data[2];
}
//这个就不会导致问题。
void fun_b(void){
uint8 data[8] = {0};
uint16 value = 0;
value = *(uint16*)data[2];
}
//这个就会导致问题
void fun_b(void){
uint8 data[8] = {0};
uint16 value = 0;
value = *(uint16*)data[3];
}
一般字节对齐的会存在两种:4字节对齐和2字节对齐。考虑到这个,data[8]的首地址肯定肯定是符合4字节对齐的。
有谁知道问题所在么?在前一个芯片上,这样写是没有问题的,但是当换了一个平台以后,这样写就会导致MCU复位。复位的原因是PC指针跑飞。
- 有谁知道的可以告知一声,谢谢了。