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要处理大量的外围设备,为便于开发,将整个程序按照硬件及功能进行模块划分,各个功能模块之间通过传递消息的方式来完成多任务的处理。

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

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查