请教一下,用ucos实现这样的功能,按键按下,运行A任务,再按一下运行B任务,再按一下,又运行A任务,如此反复, 同时在A任务运行的过程中,按下按键,A任务停止运行,直接运行b任务,
我建了3个任务,按键任务,A,B任务,请问一个信号量,怎么给两个任务用了,代码如下
[mw_shl_code=applescript,true]//任务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;
// OSTimeDlyHMSM(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 时,分,秒,毫秒
}
}[/mw_shl_code]
|