网站大量收购独家精品文档,联系QQ:2885784924

基于ATmega128时间触发嵌入式系统设计和应用.docx

基于ATmega128时间触发嵌入式系统设计和应用.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于ATmegal28时间触发嵌入式系统设计和 应用 【摘要】针对51单片机速度慢、驱动能力差、抗 干扰能力低及事件触发往往带来不确定性和不稳定性等问 题,提出了 AVR微控制器与时间触发方式相结合的嵌入式系 统。该系统结合了 AVR的硬件优势及时间触发的调度理念将 系统精度有效的控制在ms级,具有占存储单元少,可靠性 好,可预测性强,安全性高的特点。实验表明,该系统适用 于中小型实时控制系统,并可靠稳定运行。 【关键词】AVR;微控制器;时间触发;嵌入式系统; 混合式调度器 引言 近年来,嵌入式发展迅速,采用51单片机死循环的事 件触发编程方式已逐渐不能满足企业对产品稳定性和安全 性的要求。目前,嵌入式系统软件有VxWork、Linux、WinCE、 PC/0S-II等,可出于成本和技术上的考虑,微控制器往往 不会选取其进行设计。在实际应用中,往往会面临同时应付 多外设、多任务的情况,则对它们的相互调度必不可少。时 间触发嵌入式系统就是这样的简单实用的操作系统。 本文设计了基于AVR微控制器的时间触发多任务调度器 并应用于实际。该调度器使用传递消息(message)的方式 使得微控制器在多个任务及设备间切换。 AVR微控制器的结构特点 AVR是目前使用以该系列的ATmegal28为例说明,它采 用哈佛结构,RISC指令集、低功耗、片上资源丰富的特点, 极大简化了外围电路,使系统更加稳定可靠。其特点为嵌入 式系统设计提供了良好的硬件保证。 嵌入式两种触发方式的对比 在嵌入式系统中,通常采用两种本质上不同的调度方 式:事件触发和时间触发。事件触发方式往往使用多级中断 来实现,其发生时间具有随机性;而时间触发方式由一个全 局时钟驱动,系统的行为在功能与时间上都是确定的,即具 有可预测性。 1事件触发方式存在的问题 嵌入式系统开发人员有一种中断事件绝不会丢失的错 误观念,这往往给开发的产品带来灾难性的后果。中断事件 丢失在实际应用中是一个不争的事实,产生的原因有多方 面,但无外乎内因和外因两种。外因指嵌入式系统外产生的 原因,这里主要指中断源信号丢失或过于频繁;而内因又可 分为硬件原因和软件原因,硬件原因主要由所用嵌入式器件 的中断嵌套能力所致,软件原因主要由开发者编程时对任务 中断优先级设置错误以及任务处理不当所致。 例如,中断0是一个高优先级中断,而中断1是一个低 优先级中断,则由高优先级中断激活的中断服务程序不能被 低优先级的中断打断。于是,对第二个中断的响应将被延迟, 甚至在一些情况下它有被完全忽略的可能。 如果多个中断源可能在“随机的”时间间隔产生中断, 则中断响应可能被遗漏。实际上,在同时有几个有效的中断 源的情况下,几乎不可能创建程序代码来正确地处理所有可 能的中断组合。并且同时处理多个事件不但增加了系统复杂 性,而且降低了系统在所有情况下的行为预测能力。至于使 用效率,Metzner讨论并得出结论:一个包含27个任务、采 用RM调度算法的事件触发系统,CPU的实际利用率仅为18%o 2时间触发方式的优势 在该系统中,设计人员能够通过仔细安排可控的顺序, 保证一次只处理一个事件。它的可预测性使其成为安全相关 的系统的首选。Kopetz首先提出:使用基于时间触发的合作 式调度器会使得系统有非常好的可预测性。除可提高可靠性 之外,使用该方式有助于减轻CPU的负荷及存储器的使用量。 时间触发嵌入式系统的设计 在该调度器中,定时器的设置被分离出来,并使之不依 赖于编译器的数据类型以及处理器的位数,通过修改该部分 可以轻松移植到多种硬件平台。系统整体方框图如图1所示: 1消息队列 消息队列是调度器的核心,它是用户自定义的数据类 型,包括了每个任务所需要的信息。尽量将其存储在DATA 区,以供快速存取。对于基于时间触发的混合式调度器,使 用如下的数据结构,对于每个任务存储器的开销仅为8个字 节。即使是使用32位处理器,每个任务的开销也仅为14个 字节。 typedef data struct {void (code*pTask) (void); uintl6 Delay; uintl6 Period; uint8 State; uint8 Co_op; }s_task; s_task SCH_task_array[SCH_MAX_TASKS]; 4.2调度器定时器初始化函数 该函数用来产生驱动调度器的定时时标。本文所选用 AVR系列的ATmegal28微控制器具有四个定时器(两个8位, 两个16位),任一个都能用来驱动调度器,权衡考虑选用定 时器0。 void SCH_Init_T0 (void) {逐个删除各个任务;停止定时器0;设置时间大小函数; 使能定时器0方式;启动定时器0; } 注:在此期间不可开启总中断,即:SREG

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档