天行健,君子以自强不息
分类: C/C++
2012-08-09 14:52:21
#include "task_in.h"
/*
#define OS_FLAG_EN 1 // Enable (1) or Disable (0) code generation for EVENT FLAGS
#define OS_FLAG_WAIT_CLR_EN 1 // Include code for Wait on Clear EVENT FLAGS
#define OS_FLAG_ACCEPT_EN 1 // Include code for OSFlagAccept()
#define OS_FLAG_DEL_EN 1 // Include code for OSFlagDel()
#define OS_FLAG_QUERY_EN 1
在os_cfg.h中,将上述编译开关打开
*/
//事件标志组
#ifdef OS_FLAG_GROUP
#define DLYFLAG (1<<1)//定义定时事件标志
OS_FLAG_GRP *flag;//定义事件标志组指针
void task1(void *pdata)
{
INT8U err;
pdata=pdata;
flag=OSFlagCreate(0,&err);//创建事件标识组
while(1)
{
//等待标志组最低两位
OSFlagPend(flag,KEYFLAG|DLYFLAG,OS_FLAG_WAIT_SET_ALL|
//复位标志,一直等待
OS_FLAG_CONSUME,0,&err);
SerPort_SendBuf(COM1,"Task2 com1 OK!\r\n",17);
OSTimeDly(1);
SerPort_SendBuf(COM2,"Task2 com2 OK!\r\n",17);
//led亮
Led_Ctl(LED_RUN, 1);
OSTimeDly(OS_TICKS_PER_SEC);
//led灭
Led_Ctl(LED_RUN, 0);
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void task2(void *pdata)
{
INT8U err;
pdata=pdata;
while(1)
{
OSFlagPost(flag,DLYFLAG,OS_FLAG_SET,&err);//发送标志次低位,1有效
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void task3(void *pdata)
{
pdata=pdata;
}
#endif
说明:
1、OSFlagPend(flag,KEYFLAG|DLYFLAG,OS_FLAG_WAIT_SET_ALL|
//复位标志,一直等待
OS_FLAG_CONSUME,0,&err);
OS_FLAG_WAIT_SET_ALL表示定义的所有的事件标志都产生时(按键和延时都有效),才触发一次,现象为灯闪一下,即标志与。
如果改成参数OS_FLAG_WAIT_SET_ANY,只要满足一个条件,灯就闪一下。即标志或。
OS_FLAG_CONSUME表示一直等待。
2、按键事件在中断中,定义的KEYFLAG为1<<2。这里不再说明。