什么是调度器?
可以从两种角度来看调度器
1 一方面,调度器可以看作是一个简单的操作系统,允许以周期性或(更少见)单次方式来调用任务。
2 从底层角度来看,调度器可以看作是一个由许多不同任务共享的定时器中断服务程序。因此,只需初始化一个定时器,而且改变定时的时候通常只需改变一个函数。此外,无论需要运行一个、10个还是100个不同的任务,通常都可以使用一个调度器完成。注意,这种“共享中断服务程序”与桌面操作系统提供的共享打印功能非常类似。
例如:源程序清单13.6展示了如何使用调度器来调度源程序清单13.5中的三个任务。
void main(void)
{
//设置调度器一次
SCH_Init();
//增加任务(1ms时标间隔)
//Function_A 将每隔2ms运行一次
SCH_Add_Task(Function_A,0,2);
//Function_B 将每隔10ms运行一次
SCH_Add_Task(Function_B,1,10);
//Function_C 将每隔2ms运行一次
SCH_Add_Task(Function_C,3,15);
SCH_Start();
while(1)
{
SCH_Dispatch_Tasks();
}
}
源程序清单13.6 使用一个调度器来(以不同的时间间隔)运行三个周期性任务