Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1681505
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4578
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: 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。这里不再说明。

阅读(4798) | 评论(0) | 转发(0) |
0

上一篇:指针用法例程1

下一篇:ucosII之互斥信号量

给主人留下些什么吧!~~