本帖最后由 YanHuang 于 2019-4-4 22:36 编辑
以下是程序 信号量初始为0
按道理来说任务1 执行完后,通过OSTimeDlyHMSM跳到任务2执行,然后会打印出printf("任务2运行中!\r\n"),接着由于信号量为0,OSSemPend函数会调回任务1,任务1执行完之后又调到任务二,可为什么printf("任务2运行中!\r\n")只执行了一次,往后就不执行了
//任务1
void task1_task(void *p_arg)
{
u8 key;
OS_ERR err;
while(1)
{
key = KEY_Scan(0); //扫描按键
if(key==WKUP_PRES)
{
OSSemPost(&SYNC_SEM,OS_OPT_POST_1,&err);//发送信号量
LCD_ShowxNum(150,111,SYNC_SEM.Ctr,3,16,0);
}
printf("任务1运行中!\r\n");
OSTimeDlyHMSM(0,0,0,499,OS_OPT_TIME_PERIODIC,&err); //延时
}
}
//任务2
void task2_task(void *p_arg)
{
u8 num;
OS_ERR err;
while(1)
{
printf("任务2运行中!\r\n");
OSSemPend(&SYNC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量
num++;
LCD_ShowxNum(150,111,SYNC_SEM.Ctr,3,16,0);
LCD_Fill(6,131,233,313,lcd_discolor[num%14]);
LED1 = ~LED1;
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时
}
}
|