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的时间有问题,还是。。)。。。