12.3.3 信号任务调度
在RTX-51实时多任务操作系统中,还提供了使用信号来完成多任务之间切换的调度方式,即RTX-51信号任务调度。在RTX-51系统中,使用os_send_signal函数向另一个任务发送信号,接收信号的任务使用os_wait函数等待该信号。当任务接收到信号后,便结束等待状态,开始向下执行。如果,任务在使用os_wait函数等待接收信号之前,信号已经发送过来,那么该任务将立即继续执行,不再等待信号。在RTX-51系统中,使用RTX-51的信号进行任务调度的程序示例如下。
include<RTX51TNY.h>//头文件
include<stdio.h>
int count0;//声明变量
int count1;
MTask0()_task_0//任务0
{
os_create_task(1);//创建任务1
while(1)
{
count0++;
printf(“count0=%d\n”,count0);//打印输出
if(count0==20)
{
os_send_signal(1);//向任务1发送信号
count0=0;
}
}
}
MTask1()_task_1//任务1
{
while(1)
{
Count1++;
os_wait(K_SIG,0,0);//等待信号
printf(“count1=%d\n”,count1);//打印输出
}
}
在该程序中使用了RTX-51 Tiny系统,其中定义了两个任务,任务0的执行函数为MTask0,任务1的执行函数为MTask1。RTX-51 Tiny首先从任务0开始执行程序,并在任务0中创建任务1为准备执行。而任务1则在一开始便使用os_wait函数等待其他任务的信号。在任务0中,count0计数达到20之后,向任务1发送信号,并重新置count0为0。任务1接收到该信号并在下一个定时信号产生时,便将count1计数加1并输出。