登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

谁解释解释ARTX中这两个函数“os_evt_wait_and”的意思。

作者:masufang 栏目:嵌入式系统
谁解释解释ARTX中这两个函数“os_evt_wait_and”的意思。
 

2楼: >>参与讨论
汽车电子
and要同时满足多个条件  or满足一个即可
 
3楼: >>参与讨论
hotpower
and要求严格
void TaskMain (void) __task {
//volatile unsigned int Count = 0;
  IdTask = os_tsk_self ();//取本任务ID
  os_tsk_prio_self (13);//任务级别
  IdTask1 = os_tsk_create (Task1, 11);//创建Task1任务及级别
  IdTask2 = os_tsk_create (Task2, 11);//创建Task2任务及级别
  IdTaskEint0 = os_tsk_create (TaskEint0, 100);//创建TaskEint0任务及级别
  IdTaskEint1 = os_tsk_create (TaskEint1, 100);//创建TaskEint1任务及级别
  IdTaskEint2 = os_tsk_create (TaskEint2, 100);//创建TaskEint2任务及级别
  IdTaskEint3 = os_tsk_create (TaskEint3, 100);//创建TaskEint3任务及级别

  for (;;) {
    Count ++;//TaskMain任务事件计数
    if ((Count % 10) == 0) os_evt_set (0x1111, IdTask1);//每10次执行Task1任务
    else os_evt_set (0x2222, IdTask2);//其他9次执行Task2任务
    IOPIN0 ^= (1 << P0_16);    //取反P0.16
//    os_dly_wait (1);//延时10mS并将控制权交还OS
    os_dly_wait (1);//延时10mS并将控制权交还OS
  }
}

void Task1 (void) __task {
OS_RESULT result;    
//volatile unsigned int Count1 = 0;
  for (;;) {
    result = os_evt_wait_and(0x1111, 0xffff);//等待Task1任务事件发生
    if(result == OS_R_EVT) {//未超时
      Count1 ++;//Task1任务事件计数
    }
    else {
      Count10 ++;
    }
  }
}

void Task2 (void) __task {
OS_RESULT result;    
//volatile unsigned int Count2 = 0;
  for (;;) {
    result = os_evt_wait_and(0x2222, 0xffff);//等待Task2任务事件发生
    if(result == OS_R_EVT) {//未超时
      Count2 ++;//Task2任务事件计数
    }
    else {
      Count20 ++;
    }
  }
}




TaskMain发送os_evt_set (0x1111, IdTask1);
Task1接收os_evt_wait_and(0x1111, 0xffff);

若:
TaskMain发送os_evt_set (0x2222, IdTask1);
Task1接收不到os_evt_wait_and(0x2222, 0xffff);
但:
Task1可接收到os_evt_wait_or(0x2222, 0xffff);


汽车大侠我理解对否???

4楼: >>参与讨论
hotpower
os_evt_wait_or可实现任务内的多事件处理,更灵活
void TaskMain (void) __task {
  IdTask = os_tsk_self ();//取本任务ID
  os_tsk_prio_self (13);//任务级别
  IdTask1 = os_tsk_create (Task1, 11);//创建Task1任务及级别
  IdTask2 = os_tsk_create (Task2, 11);//创建Task2任务及级别
  IdTaskEint0 = os_tsk_create (TaskEint0, 100);//创建TaskEint0任务及级别
  IdTaskEint1 = os_tsk_create (TaskEint1, 100);//创建TaskEint1任务及级别
  IdTaskEint2 = os_tsk_create (TaskEint2, 100);//创建TaskEint2任务及级别
  IdTaskEint3 = os_tsk_create (TaskEint3, 100);//创建TaskEint3任务及级别

  for (;;) {
    Count ++;//TaskMain任务事件计数
    if ((Count % 10) == 0) os_evt_set (FCount, IdTask1);//每10次执行Task1任务(多事件FCount)
    else os_evt_set (0x2222, IdTask2);//其他9次执行Task2任务
    IOPIN0 ^= (1 << P0_16);    //取反P0.16
//    os_dly_wait (1);//延时10mS并将控制权交还OS
    os_dly_wait (1);//延时10mS并将控制权交还OS
  }
}

void Task1 (void) __task {
OS_RESULT result;
unsigned int i;    
  for (;;) {
    result = os_evt_wait_or(0xffff, 0xffff);//等待Task1任务事件发生
    if(result == OS_R_EVT) {//未超时
      i = os_evt_get();
      SWITCH(i) {
        case 1:    FCount = 2;
                break;
        case 2:    FCount = 3;
                break;
        case 3:    FCount = 4;
                break;
        case 4:    FCount = 1;
                break;
      }
      Count1 ++;//Task1任务事件计数
    }
    else {
      Count10 ++;
    }
  }
}

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教:linux安装程序是否兼容SATA 接口的刻录机或是硬盘??
发贴庆贺!用Visual Studio 2003.net开发CE应用
请教:16位的单片机可以做嵌入式吗?
求助rtl8019晶振问题
关于电力电子与电力传动
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号