12.3.2 事件任务调度

RTX-51的事件可以用来更加灵活地为各个任务分配CPU时间,RTX-51的事件任务调度便是使用事件来实现多任务之间切换的调度方式。在RTX-51系统中,可以使用os_wait函数向多任务内核发送事件,暂停当前任务的执行,从而可以实现在等待指定的事件时执行其他的任务。最典型的RTX-51事件是时钟信号的超时周期。在RTX-51系统中,使用os_wait函数发送中断事件实现任务调度的程序示例如下。


include<RTX51TNY.h>//头文件

include<reg52.h>

include<stdio.h>

int count0;//声明变量

int count1;

MTask0()_task_0//任务0

{

os_create_task(1);//创建任务1

while(1)

{

count0++;

printf(“count0=%d”,count0);//打印输出count0

os_wait(K_TMO,2);//暂停2个信号

}

}

MTask1()_task_1//任务1

{

while(1)

{

Count1++;

printf(“count1=%d”,count1);//打印输出count1

os_wait(K_TMO,3);//暂停3个信号

}

}


在该程序中使用了RTX-51 Tiny系统,其中定义了两个任务,任务0的执行函数为MTask0,任务1的执行函数为MTask1。RTX-51 Tiny首先从任务0开始执行程序,并在其中创建任务1为准备执行。当count0计数加1并打印输出后,执行os_wait函数,任务0将暂停两个报时信号。此时,RTX-51 Tiny内核将切换到任务1来执行。当count1计数加1并输出后,任务1同样被os_wait函数中断,任务1将暂停3个报时信号。此时RTX-51内核进入空闲状态,没有任务执行。当两个报时信号过去后,任务0才可以重新执行。因此,程序运行时,每隔两个报时信号count0计数加1并打印输出,每隔3个报时信号count1计数加1并打印输出。