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函数实现,最终导致了这样的问题 。。。

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