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 个解决方案
#2
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
#3
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。
#4
我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。
#5
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。
我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。
求解求解啊!我新手,看汇编头大
#6
另外你同事的有问题的版本是多少?
#7
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的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
另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。
http://bbs.21ic.com/icview-95426-1-1.html
具体给不了更多的帮助。
#9
另外你同事的有问题的版本是多少?
我几年前也看到过关于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
另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。
http://bbs.21ic.com/icview-95426-1-1.html
具体给不了更多的帮助。
感谢!学到很多。原因是不知道初始化顺序哪里错了,导致无法任务调度。
#1
看了这个,没看懂,不知道和我有没有关系
#2
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
#3
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。
#4
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。
我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。
#5
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的UCOS2的那个版本有bug,导致系统的任务调度器不能调度其他任务运行,运行一会就会进HardFault。
你的UCOS2版本是多少,是不是选了那个有问题的低版本。
版本286,单步了一下,确实是OS_Sched()之后F5就出现硬件报错。现象和http://bbs.csdn.net/topics/340221439(看见里面有你的回复)一模一样。有人说是数组溢出或者指针改成引用,我已经照着改了。我就在主任务加了个信号量,而且一直被信号量挂起,现在也没有什么可溢出的。。。
我昨天还问了我那个同事,他说就是Sem信号量那里的代码有bug。
求解求解啊!我新手,看汇编头大
#6
另外你同事的有问题的版本是多少?
#7
我一个同事最近也遇到这样类似的问题,一直进空闲任务,其他任务都不跑了,但我检查他代码逻辑,应该不会出现这种问题,后来发现时用的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
另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。
http://bbs.21ic.com/icview-95426-1-1.html
具体给不了更多的帮助。
#9
另外你同事的有问题的版本是多少?
我几年前也看到过关于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
另外你同事的有问题的版本是多少?
我几年前也看到过关于UCOS2的bug的帖子,但自己没有遇到过,只是映像中隐约记得有这个事。
http://bbs.21ic.com/icview-95426-1-1.html
具体给不了更多的帮助。
感谢!学到很多。原因是不知道初始化顺序哪里错了,导致无法任务调度。