ucosii 进空闲任务后就进了HardFault_Handler

时间:2021-08-24 16:02:13
有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的时间有问题,还是。。)。。。

10 个解决方案

#1


本帖最后由 woshi_ziyu 于 2014-10-11 16:48:33 编辑
看了这个,没看懂,不知道和我有没有关系   http://blog.sina.com.cn/s/blog_73a00e960102v2z4.html

#2


我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

#3


引用 2 楼 lr2131 的回复:
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。

#4


引用 3 楼 ysmz4 的回复:
Quote: 引用 2 楼 lr2131 的回复:

我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。


我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。

#5


引用 4 楼 lr2131 的回复:
Quote: 引用 3 楼 ysmz4 的回复:

Quote: 引用 2 楼 lr2131 的回复:

我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。


我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。

求解求解啊!我新手,看汇编头大

#6


另外你同事的有问题的版本是多少?

#7


引用 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(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。


我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。

求解求解啊!我新手,看汇编头大



不用看汇编,版本是多少我忘了。我看到他改错的地方比较简单。
你参考下这个帖子:http://www.amobbs.com/thread-3627546-1-1.html

百度搜索下UCOS2 bug

#8


引用 6 楼 ysmz4 的回复:
另外你同事的有问题的版本是多少?


我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。

http://bbs.21ic.com/icview-95426-1-1.html

具体给不了更多的帮助。

#9


引用 8 楼 lr2131 的回复:
Quote: 引用 6 楼 ysmz4 的回复:

另外你同事的有问题的版本是多少?


我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。

http://bbs.21ic.com/icview-95426-1-1.html

具体给不了更多的帮助。

谢谢!查了一下,ucos的bug有人已经改过了。
我在唯一的任务(modbus任务,平时被sem挂起)中加入信号量(由UART_REV、TMR中断释放信号量),结果正常运行,
之后只多加了一个任务(任务里空循环,优先级低于modbus), 就报错HardFault_Handler,
按照http://blog.csdn.net/zyboy2000/article/details/7668331#reply的方法,只能定位到某个汇编地址,不知道对应哪句C地址,
任务堆栈大小也设大了一点。
请问还有什么可能出错?

#10


引用 8 楼 lr2131 的回复:
Quote: 引用 6 楼 ysmz4 的回复:

另外你同事的有问题的版本是多少?


我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。

http://bbs.21ic.com/icview-95426-1-1.html

具体给不了更多的帮助。

感谢!学到很多。原因是不知道初始化顺序哪里错了,导致无法任务调度。

#1


本帖最后由 woshi_ziyu 于 2014-10-11 16:48:33 编辑
看了这个,没看懂,不知道和我有没有关系   http://blog.sina.com.cn/s/blog_73a00e960102v2z4.html

#2


我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

#3


引用 2 楼 lr2131 的回复:
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。

#4


引用 3 楼 ysmz4 的回复:
Quote: 引用 2 楼 lr2131 的回复:

我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。


我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。

#5


引用 4 楼 lr2131 的回复:
Quote: 引用 3 楼 ysmz4 的回复:

Quote: 引用 2 楼 lr2131 的回复:

我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。

你的UCOS2版本是多少,是不是选了那个有问题的低版本。

版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。


我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。

求解求解啊!我新手,看汇编头大

#6


另外你同事的有问题的版本是多少?

#7


引用 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(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。


我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。

求解求解啊!我新手,看汇编头大



不用看汇编,版本是多少我忘了。我看到他改错的地方比较简单。
你参考下这个帖子:http://www.amobbs.com/thread-3627546-1-1.html

百度搜索下UCOS2 bug

#8


引用 6 楼 ysmz4 的回复:
另外你同事的有问题的版本是多少?


我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。

http://bbs.21ic.com/icview-95426-1-1.html

具体给不了更多的帮助。

#9


引用 8 楼 lr2131 的回复:
Quote: 引用 6 楼 ysmz4 的回复:

另外你同事的有问题的版本是多少?


我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。

http://bbs.21ic.com/icview-95426-1-1.html

具体给不了更多的帮助。

谢谢!查了一下,ucos的bug有人已经改过了。
我在唯一的任务(modbus任务,平时被sem挂起)中加入信号量(由UART_REV、TMR中断释放信号量),结果正常运行,
之后只多加了一个任务(任务里空循环,优先级低于modbus), 就报错HardFault_Handler,
按照http://blog.csdn.net/zyboy2000/article/details/7668331#reply的方法,只能定位到某个汇编地址,不知道对应哪句C地址,
任务堆栈大小也设大了一点。
请问还有什么可能出错?

#10


引用 8 楼 lr2131 的回复:
Quote: 引用 6 楼 ysmz4 的回复:

另外你同事的有问题的版本是多少?


我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。

http://bbs.21ic.com/icview-95426-1-1.html

具体给不了更多的帮助。

感谢!学到很多。原因是不知道初始化顺序哪里错了,导致无法任务调度。