最近在开发ch582m通过ble与上位机通信, 调试发现程序老是跑死导致单片机重启,最后定位到问题是我在定义通信消息的时候使用了 #pragma pack(push, 1)语句修改了数据对齐大小,然后使用u32方式访问未按四字节对齐地址的数据时就会出现重启;
? ?1. 想问一下这种操作是必定会导致错误,还是有什么方式可以优化呢;因为之前使用其他平台的单片机都是可以的;
? ?2. 我把#pragma pack(push, 1)屏蔽掉后,在simpleProfile_WriteAttrCB()回调里面调用一个自己编写的消息编码发送函数,上位机可以正常收到数据;但是我把这个函数放到Peripheral_ProcessEvent()函数里面新建了一个任务来编码发送,每次跑到编码的时候就会崩溃,hardfault中断打印内容如下图:原因是访问地址未对齐,产生异常操作的地址是6f80208f, 但是我看映射表里这个地址是保留区域;而且为什么不同地方调用会产生不同的效果;