使用 RTX51 的信号
你可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号或旗标这可以用于
协调两个或更多的任务
等待一个信号会如下面所诉工作 如果一任务在等待一个信号并且信号标志是 0 在这个信号
被发送之前这个任务将一直处于挂起状态如果信号标志已经是 1 当任务查询信号时信号
标志会被清除并且继续执行任务。
以下例子说明了这种应用
#include <rtx51tny.h>
int counter0;
int counter1;
void job0 (void) _task_ 0 {
os_create (1); /* mark task 1 as ready */
while (1) { /* loop forever */
if (++counter0 == 0) /* update the counter */
os_send_signal (1); /* signal task 1 */
}
}
void job1 (void) _task_ 1 {
while (1) { /* loop forever */
os_wait (K_SIG, 0, 0); /* wait for a signal */
counter1++; /* update the counter */
}
}
在上述例子中 job1一直处于等待状态直到它接收到从任何其他任务发出的信号当它接收到
一个信号时它将使 counter1加 1然后继续等待另一个信号job0 将连续地增加 counter0 直到
它溢出到 0 当溢出发生时 job0发送一个信号给 job1同时 RTX51标记 job1为执行状态在
R T X 5 1 到达下一个时钟报时周期前j o b 1 不会开始执行。
|