ucosii 进空闲任务后就进了HardFault_Handler

「已注销」 2014-10-11 03:05:48
有2个任务:modbus从机(prio=4),led闪烁(没有delay,用i++来延时)(prio=8),modbus从机任务被挂起,直到接收中断或TMR的信号量来到。
ucosii空闲任务hook(同led闪烁任务的内容):
void App_TaskIdleHook (void)
{
int i;
LED1_Init();
for(;;)
{
i = 0;
LED1_ON(); 此处断点A
while(i<65535)
i++;
i = 0;
LED1_OFF(); 此处断点B
while(i<65535)
i++;
}
}
问题来了:
现在情况是:
modbus被挂起后,直接进入了空闲任务而不是LED闪烁任务,不知道是否和user mode、SVC有关,我查了一下.s没有看到这些mode。请问为什么不进LED任务?
接下来进入了空闲任务,设断点单步可以执行,看到灯一亮一灭(断点位置看上面的程序),但是再往下走就显示硬件中断错(从断点B向下走的时候),为什么?


根本问题是:什么时候用信号量将freemodbus任务挂起解挂?
我现在的做法是,凡是接收中断 / TMR post(EV_READY/EV_FRAME_RECEIVED/...)的时候,后面就跟一句OSSemPost (MboxTimeDly);,在embpoll之前OSSemPend()。
现在出现的两个错误让我根本查不出问题在哪(是sem post的时间有问题,还是。。)。。。
...全文
795 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-10-14
  • 打赏
  • 举报
回复
引用 8 楼 lr2131 的回复:
[quote=引用 6 楼 ysmz4 的回复:] 另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。 http://bbs.21ic.com/icview-95426-1-1.html 具体给不了更多的帮助。[/quote] 感谢!学到很多。原因是不知道初始化顺序哪里错了,导致无法任务调度。
lr2131 2014-10-13
  • 打赏
  • 举报
回复
引用 6 楼 ysmz4 的回复:
另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。 http://bbs.21ic.com/icview-95426-1-1.html 具体给不了更多的帮助。
lr2131 2014-10-13
  • 打赏
  • 举报
回复
引用 5 楼 ysmz4 的回复:
[quote=引用 4 楼 lr2131 的回复:] [quote=引用 3 楼 ysmz4 的回复:] [quote=引用 2 楼 lr2131 的回复:] 我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。 你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。[/quote] 我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。[/quote] 求解求解啊!我新手,看汇编头大[/quote] 不用看汇编,版本是多少我忘了。我看到他改错的地方比较简单。 你参考下这个帖子:http://www.amobbs.com/thread-3627546-1-1.html 百度搜索下UCOS2 bug
「已注销」 2014-10-13
  • 打赏
  • 举报
回复
另外你同事的有问题的版本是多少?
「已注销」 2014-10-13
  • 打赏
  • 举报
回复
引用 4 楼 lr2131 的回复:
[quote=引用 3 楼 ysmz4 的回复:] [quote=引用 2 楼 lr2131 的回复:] 我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。 你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。[/quote] 我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。[/quote] 求解求解啊!我新手,看汇编头大
lr2131 2014-10-13
  • 打赏
  • 举报
回复
引用 3 楼 ysmz4 的回复:
[quote=引用 2 楼 lr2131 的回复:] 我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。 你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。[/quote] 我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。
「已注销」 2014-10-13
  • 打赏
  • 举报
回复
引用 2 楼 lr2131 的回复:
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。 你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。
「已注销」 2014-10-13
  • 打赏
  • 举报
回复
引用 8 楼 lr2131 的回复:
[quote=引用 6 楼 ysmz4 的回复:] 另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。 http://bbs.21ic.com/icview-95426-1-1.html 具体给不了更多的帮助。[/quote] 谢谢!查了一下,ucos的bug有人已经改过了。 我在唯一的任务(modbus任务,平时被sem挂起)中加入信号量(由UART_REV、TMR中断释放信号量),结果正常运行, 之后只多加了一个任务(任务里空循环,优先级低于modbus), 就报错HardFault_Handler, 按照http://blog.csdn.net/zyboy2000/article/details/7668331#reply的方法,只能定位到某个汇编地址,不知道对应哪句C地址, 任务堆栈大小也设大了一点。 请问还有什么可能出错?
lr2131 2014-10-11
  • 打赏
  • 举报
回复
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。 你的UCOS2版本是多少,是不是选了那个有问题的低版本。
「已注销」 2014-10-11
  • 打赏
  • 举报
回复
看了这个,没看懂,不知道和我有没有关系 http://blog.sina.com.cn/s/blog_73a00e960102v2z4.html

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧