历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2020年01月29日 | 基于AVR微控制器的时间触发多任务调度器的设计与应用

2020-01-29 来源:elecfans

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所示:

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

4.1 消息队列

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


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

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

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

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

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

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

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

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


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


4.3 中断服务程序

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

4.4 调度器任务添加函数

推荐阅读

史海拾趣

Cypress Industries公司的发展小趣事

2020年,Cypress迎来了其发展历程中的一个重要时刻——与德国半导体巨头英飞凌(Infineon)的合并。这次合并使Cypress成为英飞凌的一部分,双方在技术、市场和资源等方面实现了互补和整合。这次合并不仅增强了Cypress在全球半导体市场的竞争力,也为其未来的发展提供了更广阔的空间。

以上故事均基于Cypress Semiconductor(赛普拉斯半导体)的发展历史而创作,旨在客观描述公司在电子行业中的发展历程和成就。

Compensated Devices Inc公司的发展小趣事

Compensated Devices Inc(简称CDI)最初是一家小型电子元件制造商,专注于生产高精度电阻器。随着科技的飞速发展,传统电阻器已无法满足新兴市场的需求。CDI的创始人李先生敏锐地洞察到这一点,决定投入大量资源进行研发,推出了具有温度补偿和自动校准功能的新型电阻器。这一创新产品迅速获得了市场的认可,CDI也因此逐渐在电子行业中崭露头角。

Fortiming Corporation公司的发展小趣事

背景:在电子行业,优质的客户服务是建立品牌忠诚度和口碑的关键。

发展:Fortiming始终将客户放在首位,致力于为客户提供全方位的优质服务。公司建立了完善的售后服务体系,确保客户在使用过程中遇到任何问题都能得到及时解决。同时,Fortiming还通过举办技术交流会、提供定制化解决方案等方式,加深与客户的合作关系,提升品牌形象。这些努力使得Fortiming在客户心中树立了良好的品牌形象,为公司的长期发展奠定了坚实基础。

请注意,以上故事是基于Fortiming Corporation作为电子行业中晶振供应商的一般发展路径和趋势进行构想的,具体细节可能因实际情况而有所不同。

Eclipse Magnetics公司的发展小趣事

背景:随着电子技术的快速发展,客户对频率控制产品的要求越来越高。

发展:Fortiming不断投入研发资源,进行技术创新和产品升级。公司成功开发出了一系列高精度、高稳定性的晶振产品,满足了市场对高品质频率控制产品的需求。同时,Fortiming还积极探索新的应用领域,如通信、汽车电子、物联网等,不断拓展市场边界。

G-Two Inc公司的发展小趣事

背景:光伏行业技术迭代迅速,对封装材料的要求也越来越高。

发展:福斯特始终将技术创新作为企业发展的核心驱动力,不断加大研发投入,推出了一系列具有自主知识产权的新产品。例如,公司成功研发出多层共挤型POE胶膜,有效提高了光伏组件的抗PID性能和发电效率。

成果:福斯特的技术创新不仅提升了自身产品的竞争力,也推动了整个光伏行业的技术进步和产业升级。

Crydom公司的发展小趣事

背景:光伏行业技术迭代迅速,对封装材料的要求也越来越高。

发展:福斯特始终将技术创新作为企业发展的核心驱动力,不断加大研发投入,推出了一系列具有自主知识产权的新产品。例如,公司成功研发出多层共挤型POE胶膜,有效提高了光伏组件的抗PID性能和发电效率。

成果:福斯特的技术创新不仅提升了自身产品的竞争力,也推动了整个光伏行业的技术进步和产业升级。

问答坊 | AI 解惑

门禁对讲系统不安全因素探讨

在科学技术的进步和人们对移动通信服务需求的双重推动下,楼宇门禁对讲系统正应用到各小区中。目前楼宇门禁对讲移动通信网络仍将继续不断地向前发展,以后将能更完美地实现广大楼宇对讲移动通信用户的通信服务需求。 无线接口中的不安全因素 &nbs ...…

查看全部问答>

如何检验“ADC转换后的数据通过UART传送时是否遗漏”,请教

大家好,小弟最近在用ADI公司的ADuC7060芯片,要实现ADC转换后的数据通过UART传送到超级终端。 CPU是32位,ADC精度为24位。 我程序的总体思路是,ADC连续转换模式,每转换完一组24位数据,就触发中断,随后交给UART发送。(我现在的UART波特率大 ...…

查看全部问答>

WM_RASDIALEVENT 消息传递问题

dwRet=RasDial(NULL,NULL,&RasDialParams,0xFFFFFFFF,this->m_hWnd,&m_hRasConn);   拨号,第五个参数为NULL是阻塞拨号成功。现在想实现异步的方式,工程是基于对话框的,所以hWnd句柄直接用this->m_hWnd // 注册WM_RASDIALEVENT消息 ...…

查看全部问答>

组成原理的一道题,不明白为什么要加一个门电路,麻烦讲解一下,谢谢!

CPU的地址总线16根(A15—A0,A0为低位),双向数据总线8根(D7—D0),控制总线中与主存有 关的信号有MREQ(允许访存, 低电平有效),R/W(高电平为读命令,低电平为写命令)。主存地址空间分 配如下:0—8191为系统程序区,由只读存储芯片组成;8192— ...…

查看全部问答>

PXA270核心板方案:

PXA270核心板方案:   CPU:PXA270   SDRAM:128M   FLASH:32M   接口:USB、SDCARD、SERIAL等   LCD+TOUCH:3.5‘   支持WIFI 方案可提供:SCH + PCB + BOOM + WINCE ...…

查看全部问答>

向大虾请教:xscale 中断优先级嵌套问题

小弟采用的是ixp425的cpu,vxworks操作系统。使用两个通用定时器,实现优先级高定的时器中断打断优先级低的定时器中断服务程序,而优先级低的不能打断高优先级的中断。 但是小弟做的试验结果是两个定时器中断没有相互打断:任何一个进入中断服务程 ...…

查看全部问答>

德州仪器 (TI) 和美国国家半导体 联手

今天看到TI官网里有个德州仪器 (TI) 和美国国家半导体   联手 方案大家可以参考参考!…

查看全部问答>

linux下spi读写的时间开销问题。求助!!!

板子跑的linux,我在调spi的时候遇到一个问题就是读写外设的寄存器的时间开销太大。 static void transfer (int fd) {   int ret;   uint8_t tx[] = {     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,     ...…

查看全部问答>

反激拓扑的这个反馈是如何实现的,找了很多资料都没有啊……

首先说这个电路是正常运行的,UC2844内部的误差放大器反相端直接接地,反馈直接接到了误差放大器的输出,常规的这种用法都是在COMP端加一个类似上拉电阻的形式,然后与光耦的副边串联,通过控制分压的值来反馈到COMP端,而这里是直接连到光耦的副边 ...…

查看全部问答>