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并输出,而不用再等待下一个定时信号的产生。