aws-iot-device-sdk-embedded-C 版本: 2.2.1
LiteOS版本信息:version : Huawei LiteOS V200R002C00SPC050B012
open-version : Huawei LiteOS 3.2.3
每次在執行 aws_iot_shadow_connect 的底層函數 _aws_iot_mqtt_internal_connect 時,只要該函數一返回就會報 prefetch_abort fault,隨之系統掛掉,
我去查反彙編文件時,甚至連 pc 和 lr 存的地址都搜不出來。。。。。。。。。。。
百度查了資料, prefetch_abort fault 類型的錯誤,一般是很難定位的,的確,
prefetch abort 可能的原因有:
1)操作過程中有Bug,內容被修改;
2)內存重新映射以後,出錯的地址處的內容沒有初始化;
3)PC指針無效;
,我也花了不少時間,最後,採用了一種最笨的辦法,我手動讓該函數以失敗的形式提前返回(return -1),只要他不出錯(掛死),我就再往下走幾行代碼,再讓該函數以失敗的形式提前返回(return -1),循環往復,最後定位到 init_timer 這個函數的時候出現了異常,
這個函數在之前移植的時候出現了重定義,也就是liteos內核代碼裏邊也有這麼一個函數,
可以看到,這兩個函數名字雖然一樣,但是傳入的參數結構,以及底層操作都不一樣,之前因爲不細心的原因,以爲這種linux平臺相關的接口應該是通用的,直接註釋掉了aws sdk 中的init_timer函數實現,最終導致了這樣的問題 。。。