F4探索板test56.UCOS-1-2调度有问题
//按键扫描任务,一按按键UCOSII就会死机,后面无法操作,三个任务也停了
//main.c的按键扫描任务修改如下
#if 0
void key_task(void *pdata)
{
u8 key;
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
OSTaskSuspend(LED_TASK_PRIO);//挂起LED任务,LED停止闪烁
printf("KEY0");
}
else if (key==KEY2_PRES)
{
OSTaskResume(LED_TASK_PRIO); //恢复LED任务,LED恢复闪烁
printf("KEY2");
}
else if (key==WKUP_PRES)
{
OSTaskDelReq(BEEP_TASK_PRIO); //发送删除BEEP任务请求,任务睡眠,无法恢复
printf("KEYU");
}
else if(key==KEY1_PRES)
{
OSTaskCreate(beep_task,(void *)0,(OS_STK*)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO);//重新创建任务beep
printf("KEY1");
}
delay_ms(10);
//printf("A");
}
}
#else
void key_task(void *pdata)
{
u8 key;
while(1)
{
if(KEY0==0)
{
delay_ms(5);
OSTaskSuspend(LED_TASK_PRIO);//挂起LED任务,LED停止闪烁
printf("KEY0");
}
if (KEY2==0)
{
delay_ms(5);
OSTaskResume(LED_TASK_PRIO); //恢复LED任务,LED恢复闪烁
printf("KEY2");
}
if (WK_UP==1)
{
delay_ms(5);
OSTaskDelReq(BEEP_TASK_PRIO); //发送删除BEEP任务请求,任务睡眠,无法恢复
printf("KEYU");
}
if(KEY1==0)
{
delay_ms(5);
OSTaskCreate(beep_task,(void *)0,(OS_STK*)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO);//重新创建任务beep
printf("KEY1");
}
delay_ms(10);
//printf("A");
}
}
#endif |