嵌入式技术william hill官网
直播中

哔哔哔-

9年用户 1280经验值
擅长:电源/新能源
私信 关注
[问答]

为什么RTT在运行一段时间后不定时进入hardfault呢

在main函数中只开启了一个初始化线程,由初始化线程创建其余子线程,

1.jpg

然后线程都创建成功了,但运行一段时间后不定时进入hardfault,以下是报错信息

1.jpg

显示出错线程是Air724那个,但是下方的error数量是在tshell中有两个,查了下lr所在的地址的代码是RTT内核函数,看了下GUI那个线程使用率100%,如果是GUI线程的问题,那出错线程不应该显示在GUI吗

找了很久没找到问题,想问一下怎么排查

回帖(3)

刘桂英

2022-8-31 14:25:23
1.jpg
明显这个线程栈爆了。非法写坏了其它线程栈

这个出错位置提示不是那么准确,毕竟是当汇编代码执行不下去了才告诉你有问题,其实可能很早就错了,只是没走到那一步。

排查很简单,先把所有线程栈扩大,至少 1024 !
举报

李玉兰

2022-8-31 14:25:31
tshell那个-02是超时,这个是正常的,不是错误,不用管他。
GUI_Thre 100%是不行的,把GUI_Thre的线程栈改大一些,先把这个改一下再看看。
举报

陈杰

2022-8-31 14:25:37
首先 GUI 线程的栈空间确实不够,将 GUI 线程的栈空间先扩大至现在的两倍甚至更大,然后再运行一下,看看是不是还有错误。线程的栈空间用完了可能会访问到其他的线程的栈空间导致错误。
另外没有 Air724 线程的相关代码,也没有办法来判断该线程是什么原因导致的错误,一般就是数组访问越界,或者访问非法指针之类的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分