铝合金厂家
免费服务热线

Free service

hotline

010-00000000
铝合金厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

改进型时间触发嵌入式系统编程模式

发布时间:2020-06-30 17:04:25 阅读: 来源:铝合金厂家

摘要:对于成本敏感的嵌入式系统,通常因为资源有限而难以采用抢先式实时多任务操作系统。传统的基于超级循环的前后台编程方法和基于时间触发的合作式多任务编程方法对任务的划分需要较高的技巧。本文通过对基于时间触发合作式调度器的改进,建立了一种适用于小型嵌入式系统的通用编程模式,使这类系统的编程变得清晰、简单。关键词:时间触发;合作式调度器;多任务;嵌入式系统;单片机引言 目前,RTOS特别是抢先式RTOS在嵌入式系统中的应用越来越广泛,但是还有很大一部分产品使用是小型单片机。这些系统由于成本的限制,通常资源非常有限,比如ROM往往小丁32 KB,RAM小于2 KB,由于RTOS对每个任务都要开辟单独内存区域,存放任务的上下文和各任务独立的堆栈,所以在这种系统中使用RTOS非常勉强。对于这些低成本资源受限系统通常采用“前后台”(或者叫“超级循环”)结构进行编程,这实际上是一种事件触发的编程模式,当中断数目较多且系统完成的功能相对复杂时,就会使系统的程序编写变得非常复杂并使系统运行的可预测性迅速下降。 针对这个问题,Michael J.Pont提出了一种“基于时间触发的编程模式”,这种方法有助于降低CPU的负荷并减少存储器的使用量,提高系统行为的可预测性,并使程序的结构变得简洁。但是在实际使用中,当系统中不同的任务对时间要求差异较大时,“基于时间触发的编程模式”难以给出简单有效的解决方案。为此,对“基于时间触发的编程模式”进行了改进,使之适应性更强,可以为成本和资源受限的小型嵌入式系统提供统一且有效的编程模式。1 传统编程结构的局限性 当不使用RTOS时,嵌入式软件通常采用两种传统的编程结构进行编程,一种叫“前后台厅式”或者叫“超级循环结构”,本质上是事件触发的编程方式;另一种叫时间触发编程模式,Michael J.Pont的“基于时间触发的编程模式”即属于此。 在实际工作中,当系统稍微复杂时,会发现这两种方式都有一定局限性,下面以一个实际产品设计中遇到的问题为例来说明。在设计一个用于配电柜的壁装式智能配电仪表时,CPU的程序设计需完成以下任务: ①每半秒对前显示屏的显示数据进行一次刷新。 ②每0.1 s对DI/DO进行一次刷新。 ③每0.2 s对键盘进行一次扫描。 ④每半秒对测量数据进行一次重新采集和计算。 ⑤异步串行口与上位机使用Modhus通信,速率最高1 9 200 bps。 ⑥CPU通过I2C总线与时钟芯片和EEPROM通信。 ⑦CPU通过SPI总线与LED数码管及采集芯片通信。 ⑧CPU要对所采集的6路信号进行FFT变换。 ⑨当系统掉电时,CPU要能快速响应,把当前的电度底数写入EEPROM中。 上述任务中,任务⑤和任务⑨是强实时性的,如果对串口的收发事件得不到及时响应,接收时会导致字节丢失,发送时会导致字节间时间间隔太大,造成接收方的Modbus帧定界错误,对系统掉电事件如果不能及时响应会造成EEPROM的写入失败。其他任务只要在指定的周期内能得到执行就行,但是任务⑧比较特殊,使用通常的8位CPU进行6种信号的FFT变换,哪怕每种信号只做128点的FFT,运算一次也要好几秒。下面来看用传统编程结构实现上述设计时遇到的困扰。1.1 使用“前后台方式”进行编程 使用“前后台方式”进行编程时,为保证任务⑤的及时性,使用了UART中断,当UART完成一个字节的收发后产生中断,在中断程序中将接收到的字符保存在接收缓冲区或从发送缓冲区取下一个待发字符装入UART进行发送,对Modbus协议的处理可以单独用一个任务在中断外处理,这保证了巾断程序的简短。为保证任务⑨响应的及时性,也必须为它安排一个中断。因为当系统掉电时,系统只有不到10 ms的过渡时间,系统如果不能在这个时间内完成相关的操作,系统电压将跌落至有效电压以下而丧失工作能力。 安排好了后台的中断任务后再来看看前台的任务如何完成。这里遇到的最大的挑战是对任务⑧的处理,因为任务⑧需要的执行时间太长了,简单的把它当成一个任务处理将影响系统对其他任务的响应,在超级循环中的代码结构如下: while(1){ 任务①; 任务②; …… 任务⑧; } linux操作系统文章专题:linux操作系统详解(linux不再难懂)

日照劳保工服订做

济宁制作西服

济宁工服

济南制做工作服

相关阅读