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并输出。