您的位置:首页 > 其它

ucosII的事件标志组的使用心得

2017-08-05 13:02 330 查看
UCOSII的FLAG使用类似于RTTHREAD的事件,我没仔细的研究过ucosII的手册,感觉RTTHREAD的事件更好用些,功能上应该是ucos跟强大

以下为例子:
OS_TMR *MyTimer;
OS_FLAG_GRP *MyGflag;
void mytime_callback(OS_TMR *p_tmr,void *p_arg);
int main(void)
{
uint8_t err;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);

LED_Init();

OSInit();
MyGflag = OSFlagCreate(0, &err);
//MyTimer = OSTmrCreate(10,0,OS_TMR_OPT_ONE_SHOT,(OS_TMR_CALLBACK)mytime_callback,(void *)0,(INT8U *)"MyTimer",&err);
OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);
OSStart();
}

void start_task(void *pdata)
{
uint8_t err;
OS_FLAGS flags;
OS_CPU_SR cpu_sr=0;
pdata=pdata;
//OSStatInit();

printf("task start...\r\n");
//OS_ENTER_CRITICAL();

OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTimeDlyHMSM(0,0,1,0);
OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
//OSTmrStart(MyTimer,&err);
OSTimeDlyHMSM(0,0,0,100);
//OSTmrStop(MyTimer,OS_TMR_OPT_CALLBACK,0,&err);
//OSTaskSuspend(START_TASK_PRIO);
//OS_EXIT_CRITICAL();

while(1)
{
//第二个参数可以把所有需要的可能事件都加上,OS_FLAG_CONSUME是把发生的事件标识清除,以免一直循环跑这个事件
//返回的flag就是发生的事件标识,可以根据它来判断发生哪个事件,然后进行相应的处理,这样下来才跟RTTHREAD的事件用法类似
flags = OSFlagPend(MyGflag,(OS_FLAGS)7,OS_FLAG_WAIT_SET_ANY|OS_FLAG_CONSUME,0,&err);
if(flags == 1)
printf("flag1\r\n");
if(flags == 2)
printf("flag2\r\n");
if(flags == 4)
printf("flag4\r\n");

}
}

void led0_task(void *pdata)
{
uint8_t err;
while(1)
{
LED0=0;
OSTimeDlyHMSM(0,0,1,0);
LED0=1;
OSTimeDlyHMSM(0,0,1,0);
OSFlagPost(MyGflag,(OS_FLAGS)1,OS_FLAG_SET,&err);
OSFlagPost(MyGflag,(OS_FLAGS)2,OS_FLAG_SET,&err);
}
}

void led1_task(void *pdata)
{
uint8_t err;
while(1)
{
LED1=0;
OSTimeDlyHMSM(0,0,1,0);
LED1=1;
OSTimeDlyHMSM(0,0,1,0);
OSFlagPost(MyGflag,(OS_FLAGS)4,OS_FLAG_SET,&err);
//printf("hello\r\n");
}
}

void mytime_callback(OS_TMR *p_tmr,void *p_arg)
{
uint8_t err;

printf("mytimer:%d\r\n",OSTimeGet());

//OSTmrStart(MyTimer,&err);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: