12.3.4 优先级及抢先任务切换
在默认情况下,RTX-51所有的任务优先级均为0,这是系统中最低的优先级。在RTX-51 FULL中提供了优先级设置及抢先的任务切换,而RTX-51 Tiny中则不具备这个功能。
RTX-51 FULL中优先级可以设置为0~3,使用“priority”来设定。当高优先级任务满足执行条件的时候,RTX-51 FULL将中断低优先级的任务执行。使用优先级进行抢先任务切换的程序示例如下。
include<RTX51.h>//头文件
include<stdio.h>
int count0;//声明变量
int count1;
MTask0()_task_0//任务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_priority_1//任务1,优先级为1
{
while(1)
{
os_wait(K_SIG,0,0);//等待信号
count1++;
printf(“count1=%d\n”,count1);//打印输出
}
}
注意RTX-51 TINY系统仅支持循环任务切换,不支持任务抢占和优先级切换功能,如果需要在应用程序中采用任务抢占功能,则必须使用RTX-51 FULL系统。
在该程序中采用了RTX-51 FULL系统,其中定义了两个任务。任务0的执行函数为MTask0,优先级默认为0。任务1的执行函数为MTask1,使用“priority”将优先级设定为1。RTX-51 FULL首先从任务0开始执行程序,并在任务0中创建任务1为准备执行。而任务1则在一开始便使用os_wait函数等待任务0的信号。在任务0中,count0计数达到20之后,向任务1发送信号,并重新置count0为0。任务1接收到该信号后,便立刻将count1计数加1并输出,而不用再等待下一个定时信号的产生。