作者:az旺成电料 | 来源:互联网 | 2023-09-13 20:45
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函数实现,最终导致了这样的问题 。。。