|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
谁解释解释ARTX中这两个函数“os_evt_wait_and”的意思。 |
作者:masufang 栏目:嵌入式系统 |
2楼: | >>参与讨论 |
作者: 汽车电子 于 2005/8/27 15:27:00 发布:
and要同时满足多个条件 or满足一个即可 |
3楼: | >>参与讨论 |
作者: hotpower 于 2005/8/27 15:37:00 发布:
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 于 2005/8/28 20:51:00 发布:
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 ++; } } } |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |