ch582 hardfault 重启

目前只要一开启tmos就重启。 我打印了hardfault。发现是tmos_memory_allocate() 内存分配错误。 这个错误如何调试呢?

hardfault

mepc:20003270

mcause:00000004

mtval:bfa19522


可以多测试几次,看看是否每次pc指针都指向该地方。

在lst文件中检查mepc是否有指向函数,可以查看该函数的传参。这里的报错应该是没有字节对齐。因此可以重点查看在分配内存的时候是否有进行4字节对齐。

image.png


测试了一下,每次都是指向这个相同的位置。 load 指令访存地址不对齐是什么原因造成? 由于错误指向的不是自己的写的应用程序,不知道在哪里改。


每次都指向同一个地方,且是开启tmos任务才会出现该报错,则检查你的那个tmos调用的函数,建议的是先停止tmos任务,判断一下具体是哪个调用的函数造成的。

tmos_memory_allocate这个函数看下是不是你自己封装的,如果是申请内存,则建议使用tmos_msg_allocate/tmos_msg_deallocate或者GATT_bm_alloc/GATT_bm_free。

在进行申请内存的时候,务必注意四字节对齐,指向报错也是该原因。


只有登录才能回复,可以选择微信账号登录