调试STM32F407+ucos2.86 的hard_default遇到的奇怪问题

2019-12-27 19:03发布

程序最近代码完成了,但是测试时候发现跑一段时间会进入hard_default,时间不固定,有时候一个晚上,有时候好几天,非常头疼。
根据以往经验,进入hard_default一般都是数组越界或者访问未知地址导致,刚开始怀疑是不是有任务堆栈溢出,所以使用OSTaskStk功能把每个任务的堆栈使用情况全部打印了出来,发现给定的堆栈值还是非常充裕的,才30%的使用率。
比如其中一个任务给定值4096,实际经过OSTaskStk测试最大使用量为1392,空闲2704,想这也太浪费了,就将该任务的堆栈空间修改为2*1392,但是程序编译后发现0x08010000(APP起始地址)的第一个32位数据不在0x2000 0000 - 0x 2000 2000之间,这个说明程序栈溢出,具体原理本人也不是太清楚,希望懂的朋友指导。

回归正题,第一个问题:通过OSTaskStk检测出来的栈使用量,我据此进行任务栈空间设置,为什么会出现栈溢出,这个想不明白。
                第二个问题:像这种进入hard_default的问题,结合我的程序环境(ucos),应该如何查找定位呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
fengyunyu
1楼-- · 2019-12-28 00:51
ucos中2.86版本中的这个问题(BUG) http://blog.csdn.net/robinson_911/article/details/25140693
lxgree2015
2楼-- · 2019-12-28 02:53
fengyunyu 发表于 2017-5-16 16:36
ucos中2.86版本中的这个问题(BUG) http://blog.csdn.net/robinson_911/article/details/25140693

这个bug最多只是引起任务无法调度,并不会导致硬件错误
lxgree2015
3楼-- · 2019-12-28 03:33
基本搞明白了,其实我的第一个问题本身就是错误的,事实证明OSTaskStk函数还是非常精准的
zlogon
4楼-- · 2019-12-28 08:48
楼主,很好奇你怎么解决的,hard_default我平时也经常遇见,一般就是指针飞,或者栈溢出,你的是什么原因?能说一下吗
lxgree2015
5楼-- · 2019-12-28 12:20
 精彩回答 2  元偷偷看……
zlogon
6楼-- · 2019-12-28 15:25
兄弟加油,我们在你背后为你摇旗呐喊:星宿老仙,法力无边!

一周热门 更多>