指针强制转换与字节对齐(指针类型强转)

指针强制转换与字节对齐(指针类型强转)

编码文章call10242025-01-24 9:11:2818A+A-
  • 由于涉及到网络报文的解析,在数据处理的时候,会用到指针强制转换,目前换了一个芯片,指针强制转换就出现了问题。

以下直接贴代码了,会注明,哪一种是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指针跑飞。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4