程序最近代码完成了,但是测试时候发现跑一段时间会进入hard_default,时间不固定,有时候一个晚上,有时候好几天,非常头疼。
根据以往经验,进入hard_default一般都是数组越界或者访问未知地址导致,刚开始怀疑是不是有任务堆栈溢出,所以使用OSTaskStk功能把每个任务的堆栈使用情况全部打印了出来,发现给定的堆栈值还是非常充裕的,才30%的使用率。
比如其中一个任务给定值4096,实际经过OSTaskStk测试最大使用量为1392,空闲2704,想这也太浪费了,就将该任务的堆栈空间修改为2*1392,但是程序编译后发现0x08010000(APP起始地址)的第一个32位数据不在0x2000 0000 - 0x 2000 2000之间,这个说明程序栈溢出,具体原理本人也不是太清楚,希望懂的朋友指导。
回归正题,第一个问题:通过OSTaskStk检测出来的栈使用量,我据此进行任务栈空间设置,为什么会出现栈溢出,这个想不明白。
第二个问题:像这种进入hard_default的问题,结合我的程序环境(ucos),应该如何查找定位呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个bug最多只是引起任务无法调度,并不会导致硬件错误
一周热门 更多>