调试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条回答
xiaoergao
1楼-- · 2019-12-28 18:23
任务里面有没有类似printf 之类的。曾经被这货坑过。
junzimengyou
2楼-- · 2019-12-28 18:42
xiaoergao 发表于 2017-5-17 17:02
任务里面有没有类似printf 之类的。曾经被这货坑过。

任务里用printf有什么问题,我一直用没啥毛病
xiaoergao
3楼-- · 2019-12-28 21:06
printf太长 或者float参数太多有可能会出错。可能是缓冲区不够造成的。

一周热门 更多>