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

xiaoxiao2021-02-28  94

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); }
转载请注明原文地址: https://www.6miu.com/read-23410.html

最新回复(0)