请教一下,用ucos实现这样的功能,按键按下,运行A任务,再按一下运行B任务,再按一下,又运行A任务,如此反复, 同时在A任务运行的过程中,按下按键,A任务停止运行,直接运行b任务,
我建了3个任务,按键任务,A,B任务,请问一个信号量,怎么给两个任务用了,代码如下
[AppleScript]
纯文本查看 复制代码
//任务1的任务函数void task1_task(void *p_arg) // 按键任务 有限级4{u8 key;//u8 num;OS_ERR err;while(1){ key=KEY_Scan(0); //得到键值 if(key){ switch(key) { case KEY1_PRES://控制LED1翻转 // OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err);//使用系统内建信号量向任务task2发送信号量 OSSemPost (&MY_SEM,OS_OPT_POST_ALL,&err);//发送全局信号量 all所有任务都发送 1 最高任务// LED0=1;// LED1=1;// break;// case KEY2_PRES://控制LED1翻转 // LED1=0;// OS
timeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒// LED2=0;// OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒// LED3=0;// OSTimeDlyHMSM(0,0,3,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒 // break; default: break; } }OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err); //延时10ms}}//任务2的任务函数void task2_task(void *p_arg) //点亮小灯任务 优先级6{//static u8 num;OS_ERR err;while(1){ //OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err);//请求任务内建的信号量 请求信号量OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量 timeout为0一直等待下去,直到信号量出现num1++;//{LED1 = 0;OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒LED0 = 0;OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒LED2 = 0;OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒LED3 = 0;}//else//{//// LED0 = 1;// LED1 = 1;// LED2 = 1;// LED3 = 1;//} OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒}}void task0_task(void *p_arg) //关闭小灯任务 优先级5{//static u8 num;OS_ERR err;while(1){ OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量 timeout为0一直等待下去,直到信号量出现num2++; // MY_SEM.Ctr { LED0 = 1; LED1 = 1; LED2 = 1; LED3 = 1;}OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒}}
0