博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ucosII的事件标志组的使用心得
阅读量:4137 次
发布时间:2019-05-25

本文共 1958 字,大约阅读时间需要 6 分钟。

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);
}

转载地址:http://xelvi.baihongyu.com/

你可能感兴趣的文章
oracle分区表的性能提升
查看>>
"Cannot allocate memory" OutofMemory when call Ant to build Polish project in Tomcat
查看>>
dumpcap抓包(python)
查看>>
查看文件是否被其他进程访问
查看>>
字符编码详解
查看>>
python使用dpkt分析wireshak报文(Modbus规约)
查看>>
css中的IFC
查看>>
CentOS 6.5下 mysql用户root登录不了
查看>>
windows + tomcat 部署web服务 http 改为https访问方法
查看>>
Windows系统下Apache 服务器启动以及过程中产生问题的解决办法
查看>>
Oracle服务说明
查看>>
异常收集(三):Missing artifact com.oracle:ojdbc6:jar:1.0 两种解决方案
查看>>
异常收集(四):Plugin execution not covered by lifecycle configuration
查看>>
异常收集(五):Io 异常: The Network Adapter could not establish the connection
查看>>
JSP中的转义字符
查看>>
SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
Linux 操作指令收集
查看>>
CentOS 7下卸载MySQL方式(转)
查看>>
CentOS7 安装MySQL 5.6.43
查看>>
使用Java 导入/导出 Excel ----Jakarta POI
查看>>