• 指针强制转换与字节对齐


    指针强制转换与字节对齐

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

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

    • 有谁知道的可以告知一声,谢谢了。
  • 相关阅读:
    C#基础小整理2
    面向过程之骑士飞行棋
    Winform基础程序和ADO.NET基础
    深刻的理解面向对象
    xargs 命令
    用 Graphviz + CodeViz可视化函数调用
    gdb调试器命令学习总结笔记 stl printer
    iconv 文件编码转换
    python urllib编码
    gcc g++ 参数
  • 原文地址:https://www.cnblogs.com/ply616/p/5654717.html
Copyright © 2020-2023  润新知