最近在開發(fā)ch582m通過ble與上位機(jī)通信, 調(diào)試發(fā)現(xiàn)程序老是跑死導(dǎo)致單片機(jī)重啟,最后定位到問題是我在定義通信消息的時候使用了 #pragma pack(push, 1)語句修改了數(shù)據(jù)對齊大小,然后使用u32方式訪問未按四字節(jié)對齊地址的數(shù)據(jù)時就會出現(xiàn)重啟;
? ?1. 想問一下這種操作是必定會導(dǎo)致錯誤,還是有什么方式可以優(yōu)化呢;因為之前使用其他平臺的單片機(jī)都是可以的;
? ?2. 我把#pragma pack(push, 1)屏蔽掉后,在simpleProfile_WriteAttrCB()回調(diào)里面調(diào)用一個自己編寫的消息編碼發(fā)送函數(shù),上位機(jī)可以正常收到數(shù)據(jù);但是我把這個函數(shù)放到Peripheral_ProcessEvent()函數(shù)里面新建了一個任務(wù)來編碼發(fā)送,每次跑到編碼的時候就會崩潰,hardfault中斷打印內(nèi)容如下圖:原因是訪問地址未對齊,產(chǎn)生異常操作的地址是6f80208f, 但是我看映射表里這個地址是保留區(qū)域;而且為什么不同地方調(diào)用會產(chǎn)生不同的效果;