新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 基于时间触发嵌入式系统的设计与应用

基于时间触发嵌入式系统的设计与应用

作者: 时间:2013-12-13 来源:网络 收藏
line-height: 22px; text-indent: 2em; font-family: 宋体, Georgia, verdana, serif; ">SREG=0×80或SEI();调度器必须先设定一个默认的时间片,这并不是件简单的事。时间片过长会导致系统对交互行为的响应表现欠佳;时间片太短又会明显地增大调度器处理耗时,而留给任务运行的时间却很短。

本文引用地址:https://www.eepw.com.cn/article/227567.htm

根据笔者经验,一个较为可取的时间片是略大于一次典型的交互所需要的时间,使大多数进程在一个时间片内完成。经反复尝试,时间片选择在1~5ms之间执行效率较高,这样既可满足响应速度的要求又能把任务执行的时间降到最低。该时间与任务个数和任务运行时间均有关,具体大小视情况而定。

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

基于时间触发嵌入式系统的设计与应用

针对该应用,可设计功能模块:MSGMap[],该数组由各个功能模块组成,具体子函数如表1所列,使用函数数组的方式可以增强程序的扩展能力。如果有新的外设,只需在这里添加对应的模块入口,并完成相应的模块就可以增加系统的功能。

基于时间触发嵌入式系统的设计与应用

其中每个任务的运行周期间隔时间是程序中设定的参数(周期应为4ms的倍数),具体执行时间由AVR Studio测得,均应小于设定时间片4ms,否则应用将出错,需重新设定时间片大小或再次分割功能模块。其中看门狗处理任务是唯一的抢占式任务。

6.结论

实验表明,以AVR微控制器为核心的控制系统,外围扩展功能强大、开发较简单,结合以理念为内核的操作系统,设计时一次只为一个任务分配空间,每个任务的存储开销只有8个字节,采用由C语言与汇编混合式编程,简单、安全,可预测性强,尤其适用于对成本和稳定性均有要求的中小企业。随着嵌入式系统的发展,基于AVR的时间触发嵌入式系统必然有着广阔的应用前景。

电磁炉相关文章:电磁炉原理



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭