使用 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 不會開始執行。
|