历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2018年02月05日 | 基于AVR的时间触发嵌入式系统的设计与应用

2018-02-05 来源:eefocus

    1.前言

    近年来,嵌入式发展迅速,采用51单片机死循环的事件触发编程方式已逐渐不能满足企业对产品稳定性和安全性的要求。目前,嵌入式系统软件有VxWork、Linux、WinCE、μC/OS-II等,可出于成本和技术上的考虑,微控制器往往不会选取其进行设计。在实际应用中,往往会面临同时应付多外设、多任务的情况,则对它们的相互调度必不可少。时间触发嵌入式系统就是这样的简单实用的操作系统。


    本文设计了基于AVR微控制器的时间触发多任务调度器并应用于实际。该调度器使用传递消息(message)的方式使得微控制器在多个任务及设备间切换。

    2.AVR微控制器的结构特点

    AVR是目前使用以该系列的ATmega128为例说明,它采用哈佛结构,RISC指令集、低功耗、片上资源丰富的特点,极大简化了外围电路,使系统更加稳定可靠。其特点为嵌入式系统设计提供了良好的硬件保证。

    3.嵌入式两种触发方式的对比

    在嵌入式系统中,通常采用两种本质上不同的调度方式:事件触发和时间触发。事件触发方式往往使用多级中断来实现,其发生时间具有随机性;而时间触发方式由一个全局时钟驱动,系统的行为在功能与时间上都是确定的,即具有可预测性。

    3.1 事件触发方式存在的问题

    嵌入式系统开发人员有一种中断事件绝不会丢失的错误观念,这往往给开发的产品带来灾难性的后果。中断事件丢失在实际应用中是一个不争的事实,产生的原因有多方面,但无外乎内因和外因两种。外因指嵌入式系统外产生的原因,这里主要指中断源信号丢失或过于频繁;而内因又可分为硬件原因和软件原因,硬件原因主要由所用嵌入式器件的中断嵌套能力所致,软件原因主要由开发者编程时对任务中断优先级设置错误以及任务处理不当所致。

    例如,中断0是一个高优先级中断,而中断1是一个低优先级中断,则由高优先级中断激活的中断服务程序不能被低优先级的中断打断。于是,对第二个中断的响应将被延迟,甚至在一些情况下它有被完全忽略的可能。

    如果多个中断源可能在“随机的”时间间隔产生中断,则中断响应可能被遗漏。实际上,在同时有几个有效的中断源的情况下,几乎不可能创建程序代码来正确地处理所有可能的中断组合。并且同时处理多个事件不但增加了系统复杂性,而且降低了系统在所有情况下的行为预测能力。至于使用效率,Metzner讨论并得出结论:一个包含27个任务、采用RM调度算法的事件触发系统,CPU的实际利用率仅为18%.

    3.2 时间触发方式的优势

    在该系统中,设计人员能够通过仔细安排可控的顺序,保证一次只处理一个事件。它的可预测性使其成为安全相关的系统的首选。

    Kopetz首先提出:使用基于时间触发的合作式调度器会使得系统有非常好的可预测性。除可提高可靠性之外,使用该方式有助于减轻CPU的负荷及存储器的使用量。

    4.时间触发嵌入式系统的设计

    在该调度器中,定时器的设置被分离出来,并使之不依赖于编译器的数据类型以及处理器的位数,通过修改该部分可以轻松移植到多种硬件平台。系统整体方框图如图1所示:

     

     

    4.1 消息队列

    消息队列是调度器的核心,它是用户自定义的数据类型,包括了每个任务所需要的信息。尽量将其存储在DATA区,以供快速存取。

    对于基于时间触发的混合式调度器,使用如下的数据结构,对于每个任务存储器的开销仅为8个字节。即使是使用32位处理器,每个任务的开销也仅为14个字节。

     

     

    4.2 调度器定时器初始化函数

    该函数用来产生驱动调度器的定时时标。

    本文所选用AVR系列的ATmega128微控制器具有四个定时器(两个8位,两个16位),任一个都能用来驱动调度器,权衡考虑选用定时器0.

    void SCH_Init_T0(void){逐个删除各个任务;停止定时器0;设置时间大小函数;使能定时器0方式;启动定时器0;}

    注:在此期间不可开启总中断,即:

    SREG=0×80或SEI();调度器必须先设定一个默认的时间片,这并不是件简单的事。时间片过长会导致系统对交互行为的响应表现欠佳;时间片太短又会明显地增大调度器处理耗时,而留给任务运行的时间却很短。

    根据笔者经验,一个较为可取的时间片是略大于一次典型的交互所需要的时间,使大多数进程在一个时间片内完成。经反复尝试,时间片选择在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的时间触发嵌入式系统必然有着广阔的应用前景。


推荐阅读

史海拾趣

DAQ Electronics LLC公司的发展小趣事

DAQ Electronics LLC公司成立于XX年,由一群热衷于数据采集技术的工程师创立。当时,市场上对于高精度、高效率的数据采集设备需求日益增长,但现有产品往往无法满足。创始人们凭借对技术的深刻理解和敏锐的市场洞察力,决定自主研发数据采集硬件,并成立了DAQ Electronics LLC公司。他们凭借有限的资金和资源,开始了艰苦的创业之旅。

柯爱亚(ceaiya)公司的发展小趣事

为了保持技术领先地位,柯爱亚不断加大研发投入,引进先进的研发设备和人才。公司在功率电感、变压器等领域取得了多项技术成果,并申请了多项专利。这些技术成果不仅提升了柯爱亚产品的竞争力,还推动了整个电子行业的发展。

APC (APC by Schneider Electric)公司的发展小趣事

进入21世纪,数据中心成为了企业信息化建设的核心。APC凭借其在UPS电源保护领域的深厚积累,稳步向数据中心市场拓展。通过并购和技术创新,APC不仅成为了首个收入达到十亿美元的以UPS为主营业务的公司,更在数据中心领域推出了多款创新产品,如InfraStruXure®架构。这一架构将电源、制冷、机架和管理无缝集成为一个模块化、可扩展的、预制式解决方案,为数据中心带来了前所未有的效率和可靠性提升。

Dresden Elektronik公司的发展小趣事

在Dresden Elektronik公司创立之初,其创始人看中了电子行业中嵌入式系统技术的巨大潜力。他们凭借对技术的深刻理解和敏锐的市场洞察力,开发出了一系列高性能、低成本的嵌入式系统解决方案。这些创新产品迅速在市场上获得了认可,为公司赢得了第一桶金,也为后续的发展奠定了坚实的基础。

ALCOA公司的发展小趣事

近年来,随着环保意识的提高,ALCOA积极推动可持续发展和环保倡议。公司致力于减少生产过程中的能源消耗和废弃物排放,同时也在研发更环保的铝材和生产工艺。这些努力不仅提升了公司的社会形象,也为其在电子行业中的长期发展奠定了坚实的基础。

以上五个故事,只是ALCOA公司发展历程中的一部分。然而,这些故事足以展现出这家公司在电子行业中的卓越成就和持续创新的精神。

艾华集团(AISHI)公司的发展小趣事

2020年,受全球疫情影响,许多中小电容器厂家面临供应链中断、生产受阻等困境。然而,艾华集团凭借其在行业内的深厚积累和强大的研发实力,迅速调整生产策略,优化供应链管理,成功应对了疫情带来的挑战。同时,公司还加大了对新兴市场的开拓力度,进一步巩固了在全球市场的地位。

问答坊 | AI 解惑

准谐振SMPS控制器L6565功能原理及应用

准谐振SMPS控制器L6565功能原理及应用      ST公司在近期推出的L6565单片IC,是适用于准谐振(QR)零电压开关(ZVS)回扫变换器电流型初级控制器。QR操作依靠变压器退磁感测输入获得,变换器功率容量随主线电压变化通过线路电 ...…

查看全部问答>

一些高校模电与数电的学习网址

http://eelab.xidian.edu.cn/bbs/index.asp?boardid=8&page http://ceee.ytu.edu.cn/ask/forumdisplay.php?fid=10&page http://etcee.bjut.edu.cn/BBS/list.asp?boardid=3&page http://eelab.whu.edu.cn/bbs/ShowPost.asp?id=458 http://eela ...…

查看全部问答>

请教高手一个问题,急!不胜感激

我有个60G的硬盘,需要在程序运行之后检测可用空间,我使用ioctl(fp,FIOFREE,&tmp),但似乎总是不对,变量tmp应该定义什么类型的啊,请各位高手帮忙啊!!! 非常感谢…………………

查看全部问答>

wince 一级界面的字体很浅该怎么改

如题,wince 比如打开ie,一级界面的字体很浅,然后点一个链接或者别的,跳转到二级界面时候字体就正常了,,请教如何 修改…

查看全部问答>

捡垃圾机器人资料公开

<!--[if !supportLists]-->一、 <!--[endif]-->研究意义及价值 电子技术的发展使得众多的设备越来越具有智能化,而现代生活的发展又使人们对于具有一定使用价值和自主性的“机器人”产生了需求。 研究一台具有自动导航、识别目标、清理目 ...…

查看全部问答>

Quartus II 中管脚上拉电阻(弱上拉)的设置方法

在使用 Altera 的 FPGA 时候,根据系统设计需要在管脚的内部加上上拉电阻。Quartus II 软件中在 Assignment 的 Pin Planner中可以设置。具体过程如下:  1.  在菜单 Ass ...…

查看全部问答>

Atmel SAM D21 Xplained Pro开发板

很荣幸能够获得 Atmel SAM D21 Xplained Pro开发板的免费使用,而且还是包邮的……其实,上周末已经收到了,由于种种原因一直没时间使用并发一篇感想,现在简要和大家共享几张图片,以表……   &nbs ...…

查看全部问答>

电路中7个常用接口类型之要点说明

本帖最后由 dontium 于 2015-1-23 11:23 编辑 我们知道,在电路系统的各个子模块进行数据交换时可能会存在一些问题导致信号无法正常、高质量地“流通”,例如有时电路子模块各自的工作时序有偏差(如CPU与外设)或者各自的信号类型不一致(如传感 ...…

查看全部问答>

我的msp432突然无法下载仿真

放假了本想好好学一下432,用CCS下了几个例程,然后手残升级了CCS,再想下程序就悲剧了,出现下面的报错,不知道哪位大侠知道是什么原因,帮我解决一下 XDS110的驱动貌似没有问题 …

查看全部问答>

如果有一天,我跟物体交流无碍,你可别惊奇……

人际之间侃侃而谈,往往展现一个人的沟通能力,那么人和物体之间呢? 如果你还觉得人和物体能实现沟通是一种“异能”,那就太落伍啦! 物联网(IOT)其目标正是实现人们可以和物体“对话”,物体和物体之间也能“交流”。从1999年概念的提出发展 ...…

查看全部问答>