[ZLG-MCU] 急:请教uCOS多任务管理死机?

[复制链接]
 楼主| 坚持梦想 发表于 2008-5-25 21:32 | 显示全部楼层 |阅读模式
在IAR开发平台,EASYARM615上移植uCOSII。在实验例程5.5邮箱按键实验的基础上添加3个任务,根据邮箱消息内容执行相应任务。<br />添加2个任务,可以正常切换任务。但改成3个任务后,当运行第3个任务时,系统就死机。<br />这是为什么?是硬件还是软件问题?因为新增两个任务都可以,所以觉得程序编写应该没有问题……<br />不知道大家是否遇到过这样的问题,恳请指点~~谢谢!
zlgarm 发表于 2008-5-26 08:40 | 显示全部楼层

信息不多

信息不多,只能估计下面情况:<br />1)堆栈溢出,尝试把任务的堆栈加大试试。<br />2)最大任务数太少,第三个任务无法创建。<br />3)&nbsp;第三个任务操作了什么错误东西,如读写不存在的寄存器。<br /><br />(zlgarm_zsg)
 楼主| 坚持梦想 发表于 2008-5-26 13:03 | 显示全部楼层

尝试失败

1、以下是我原来定义的任务堆栈及主堆栈大小,<br />#define&nbsp;&nbsp;TASK_START_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50<br />#define&nbsp;&nbsp;TASK_A_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50<br />#define&nbsp;&nbsp;TASK_B_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30<br />#define&nbsp;&nbsp;TASK_C_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30<br />#define&nbsp;&nbsp;TASK_D_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;<br />#define&nbsp;&nbsp;TASK_E_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50<br />#ifndef&nbsp;__STACK_SIZE<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;__STACK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;256<br />#endif<br />结果运行第三个任务时死机。<br />2、于是我把堆栈改为<br />#define&nbsp;&nbsp;TASK_E_STK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;70<br />#ifndef&nbsp;__STACK_SIZE<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;__STACK_SIZE&nbsp;&nbsp;&nbsp;&nbsp;512<br />#endif<br />结果程序一运行就跑飞。<br />好像问题越来越多。。。。<br />3、第三个任务与每二个任务内容做了交换,结果,原先的第三个任务运行正常了,现在的第三个任务仍然一运行就死机。所以觉得应该不是任务内容本身的问题。<br />
jxb163 发表于 2008-5-28 17:59 | 显示全部楼层

用反真器调试下,看怎么跑飞的

UCOS这东西,费力不讨好,
 楼主| 坚持梦想 发表于 2008-5-28 23:29 | 显示全部楼层

如何调试,能否说得具体些?

我一下载运行程序,程序就进入FaultISR了。这种情况下,要如何仿真调试才能找到原因?请高手指点,说得具体些。先谢谢了~
zlgarm 发表于 2008-5-29 08:43 | 显示全部楼层

问题所在

“我一下载运行程序,程序就进入FaultISR了”<br />&nbsp;&nbsp;这种情况可能是程序中定义了很多RAM全局/静态变量,并且定义了初始值。在进入main()前,先跑一段小程序,把初始值从FLASH文字池,复杂到RAM全局/静态变量,这个过程是使用主堆栈的,如果数据过多就堆栈溢出,进入FaultISR.<br /><br />(zlgarm_zsg)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

12

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部