指针强制转换与字节对齐

指针强制转换与字节对齐

  • 由于涉及到网络报文的解析,在数据处理的时候,会用到指针强制转换,目前换了一个芯片,指针强制转换就出现了问题。

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

  • 有谁知道的可以告知一声,谢谢了。
posted @ 2016-07-08 22:02  ply616  阅读(1948)  评论(1编辑  收藏  举报