|
使用 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为执行状态。 在 RTX51到达下一个时钟报时周期前,job1不会开始执行。
优先权和抢先机制
上述程序的缺点是当 job0发出信号时 job1并不是立即开始执行。 在一些情况下,由于时间的原因这是不受欢迎的。 RTX51允许你指定任务的优先级。 一个具有较高优先级的任务变成可用的时,会中断一个低优先级任务或抢在它前面执行。 这叫做优先型多任务或仅仅称之为抢先机制。
注意 RTX51 Tiny不支持抢先机制和优先权。 、
你可以变更上述函数 job1的说明给它一个比 job0高的优先级。 全部任务的默认优先级均为 0。 这是最低的优先级。 优先级可以设定为 0-3。 下面的例子说明如何定义 job1的优先级为1。
void job1 (void) _task_ 1 _priority_ 1 {
while (1) { /* loop forever */
os_wait (K_SIG, 0, 0); /* wait for a signal */
counter1++; /* update the counter */
}
}
现在、每当 job0发送一个信号给 job1时,job1将立即开始执行。
用 RTX51进行编译和连接
rtx51是完全地统一到 c51程序设计语言中的。 这使得很容易熟悉如何生成 RTX51应用程序。 上述的例子是可执行的 RTX51程序。 你不需要书写任何 8051汇编程序或函数。 你唯一需要做的是用c51编译你的 RTX51程序并把他们用 BL51 Linker/Locator连接在一起。 例如:如果你使用 RTX51 Tiny的话,你将使用以下命令行命令进行编译和连接:
C51 EXAMPLE.C
BL51 EXAMPLE.OBJ RTX51TINY
如果你使用 RTX51 的话,你将使用以下命令行命令进行编译和连接:
C51 EXAMPLE.C
BL51 EXAMPLE.OBJ RTX51
中断
RTX51工作在与中断功能相似的状态下。 中断函数可以与 RTX51通信并且可以发送信号或消息给 RTX51任务。 RTX51 Full允许将中断指定给一个任务。
消息传送
RTX51 Full支持使用以下函数在任务间进行消息交换:SEND、 RECEIVE MESSAGE和 WAIT for MESSAGE。 消息是一个可以解释为指向存储块的指示字的 16位数值。 RTX51 Full支持使用可分配存储区系统、可变大小的消息。
CAN通信
局域网控制器可以很容易地用 RTX51/CAN实现。RTX51/CAN是一个统一在 RTX51 Full中的 CAN任务。 RTX51 CAN任务实现经由 CAN网络的信息传送。 其他的CAN工作站既可以使用 RTX51 配置也可以不使用 RTX51 配置。
BITBUS通信
RTX51 Full 包括支持用 Intel 8044传送信息的主和从 BITBUS任务。
事件
RTX51的等待功能支持以下事件∶
·超时(Timeout)∶挂起运转的任务指定数量的时钟报时周期。
·间隔( Interval)∶(仅在 RTX51 Tiny中使用)类似于超时,但是软件定时器没有复位来产生循环的间隔(时钟所需要的)。
·信号(Signal)∶用于任务内部协调。
·消息(Message)∶(仅适用于 RTX51 Full)用于消息的交换。
·中断( Interrupt)∶(仅适用于 RTX51 Full)一个任务可以等待 8051硬件中断。
·旗标标志( Semaphore)∶(仅适用于 RTX51 Full)旗标标志用于管理共享的系统资源。