4.3 中断服务程序

建议该函数由CTC方式激活,当某任务需要运行时,使之处于就绪态等待被执行。该函数内容由具体任务而定。

4.4 调度器任务添加函数

该函数用来将任务添加到消息队列,以保证条件满足时被调用,函数如下所示:

基于时间触发多任务调度器的嵌入式系统设计与应用

{定义静态变量i;循环判断任务队列是否有空间;若无,报错返回;否则,添加任务;}

4.5 调度函数

刷新函数虽然能够直接激活任务,但若直接运行,长任务将破坏时标中断,这意味着所有的系统定时都将受到严重影响,造成许多任务不能被调度。因此,为了在长任务存在的情况下使调度器的可靠性最大化,分离刷新和调度这两个操作是必要的。

时间触发嵌入式系统采用的是FCFS算法,为了提高系统的响应速度,必须要求Durationtask

void SCH_Dispatch_Tasks(void){定义静态变量i;如果运行标志位大于0,则执行该任务;该标志位清零;如果是单次任务,则将其删除;}

4.6 调度器任务删除函数

void SCH_Delete_Task(const uint8task_id){定义 静态返回值;若指针函数为空,返回空闲代码;否则,对其延迟、周期、状态等变量清零;返回代码;}

5.应用实验

以电磁炉系统为例,进一步介绍基于AVR微控制器的时间触发嵌入式系统的具体应用。

电磁炉系统是一个复杂的嵌入式系统,如图2所示,AVR要处理大量的外围设备,为便于开发,将整个程序按照硬件及功能进行模块划分,各个功能模块之间通过传递消息的方式来完成多任务的处理。

基于时间触发多任务调度器的嵌入式系统设计与应用