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);
}
以下为例子:
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);
}
相关文章推荐
- 按钮控件的 BCN_HOTITEMCHANGE 事件响应函数使用心得
- ucos-ii学习笔记——信号量集(事件标志组)的原理及使用
- ucosii学习 事件标志组
- Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
- js之onload事件的一点使用心得
- DataGridView中内置控件常用事件使用心得
- C++事件和互斥使用的小心得
- μC/OS-II事件标志组的入门级使用方法
- SqlDataSource的Selecting事件使用心得
- ucosii之事件标志组管理
- CoOS使用教程——事件标志
- 从零开始学习UCOSII操作系统9--事件标志组
- backboneJS 使用心得(2)view和model事件的多次绑定(转载)
- 初次使用touch事件心得
- Android:Click,LongClick,Touch,KeyDown,KeyUp事件使用心得
- js之onload事件的一点使用心得
- js之onload事件的一点使用心得
- iphone开发之UIButton按钮的使用(一)拖线实现 多个按钮分别用多个方法实现事件监听
- AWS使用心得:当初我曾错过的那些宝贵经验
- vs2010中对mschart控件使用的一些心得