本文共 1958 字,大约阅读时间需要 6 分钟。
UCOSII的FLAG使用类似于RTTHREAD的事件,我没仔细的研究过ucosII的手册,感觉RTTHREAD的事件更好用些,功能上应该是ucos跟强大
void mytime_callback(OS_TMR *p_tmr,void *p_arg);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
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);
void start_task(void *pdata)
printf("task start...\r\n");
OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
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_FLAG_CONSUME是把发生的事件标识清除,以免一直循环跑这个事件 //返回的flag就是发生的事件标识,可以根据它来判断发生哪个事件,然后进行相应的处理,这样下来才跟RTTHREAD的事件用法类似
flags = OSFlagPend(MyGflag,(OS_FLAGS)7,OS_FLAG_WAIT_SET_ANY|OS_FLAG_CONSUME,0,&err);
void led0_task(void *pdata)
OSFlagPost(MyGflag,(OS_FLAGS)1,OS_FLAG_SET,&err);
OSFlagPost(MyGflag,(OS_FLAGS)2,OS_FLAG_SET,&err);
void led1_task(void *pdata)
OSFlagPost(MyGflag,(OS_FLAGS)4,OS_FLAG_SET,&err);
void mytime_callback(OS_TMR *p_tmr,void *p_arg)
printf("mytimer:%d\r\n",OSTimeGet()); //OSTmrStart(MyTimer,&err);
转载地址:http://xelvi.baihongyu.com/