aws-iot-device-sdk-embedded-C 移植到liteos系統,在進行mqtt連接時導致系統掛死報 prefetch_abort fault 錯的問題

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函數實現,最終導致了這樣的問題 。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章