当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]针对记录仪提出了一种抢占式和非抢占式的复合多任务调度策略。详细描述了任务的划分、内存管理方法、基于消息驱动机制的任务调度以及兼顾高优先级任务实时性和系统运行高效性的调度策略。

实时多任务系统应用极其广泛,几乎渗透到各行各业,系统分类也很复杂。虽然不同的应用在实现模式上不完全一样,但核心思想是一致的。在嵌入式系统中,实时多任务机制是依靠启动之后运行的一段后台任务管理程序实现的。应用程序运行在该管理器程序之上。后台根据各个任务的要求,进行资源管理、消息管理、任务调度、异常处理等工作。其首要目的是调度一切可利用的资源实现实时控制任务。

实时系统主要有两大类:软实时系统和硬实时系统。软实时系统的宗旨是使各个任务运行的越快越好,并不要求限定某一任务必须在多长时间内完成。在硬实时系统中,各任务不仅要执行无误而且要做到准时。大多数实时系统都是二者的结合。对于一个复杂任务系统,任务调度模式的选用是其系统架构的一个重点。无纸记录仪具有多层次的界面管理和较高的实时响应需求,由此选择与之相适应的系统任务调度模式是势在必行的。

本论文综合考虑了各任务响应的实时性需求,对任务进行了创造性的调整,进而将软实时系统和硬实时系统进行了有机的结合,规划出最为合理的任务调度模式。

1 记录仪实时多任务的特点

通常的实时多任务操作系统都比较庞大,对于由单片机(80C320)组成的实时系统是不适用的。由于单片机的运算能力和内存有限,要求实时操作系统具有简单实用、高效可靠的特性。就记录仪而言,其任务和功能是预知的,则内存和文件管理系统可简化,甚至取消[1]。因为任务对存储器的要求是明确的,这样就可以使用固定和独立的存储区域分配方案,无需通过OS来控制和分配。因此,实时多任务操作系统就可以简化为基于任务调度与时钟中断管理为核心的调度模块。记录仪中的任务状态有四种:运行、就绪、等待、挂起,睡眠状态并入等待,不再另加以区分。

2 任务的划分、组织和调度

2.1 任务的划分

在单片机实时多任务系统中,实现实时多任务机制的关键在于将系统功能合理地分解成各个任务模块。划分任务的原则: 功能相对独立,并能与其他程序同时执行的程序划分为一个任务。但任务划分不能太细,否则将增加任务切换的系统开销,降低系统效率并影响系统响应的实时性。文献[2]指出,应尽量将关系密切的任务合并,减少任务间的通信。综合考虑任务的实时性和执行时间,记录仪的十个任务可分为三类:

(1)高优先级任务:下位机上传采样值的处理,虚拟通道组织,报警处理。这类任务实时性要求高,执行时间<0.1s,如采样值处理任务,记录仪要保存采样值作为历史数据,保存过程中要加上时标,采样值正确而时标错误的记录是无效的。

(2)低优先级任务:按键响应、显示、PID控制、流量积算。这类任务执行时间<0.2s,任务实时性要求一般。如按键响应任务,延迟0.5s是可以容忍的。

(3)后台任务:存储、打印、与管理机(PC)通信。这类任务的执行时间>1s,对实时性的要求最低。

2.2 任务的组织

系统上电,初始化每个任务的固定任务栈,建立任务队列状态表和任务控制表(TCB),这两张表是任务调度的依据。任务队列状态表由高优先级、低优先级、后台任务三张子表组成;任务控制表由任务首地址、状态寄存器、任务局部变量三部分组成,数据结构见图1。


2.3 基于消息驱动机制的任务调度

借鉴面向对象程序设计的思想,在记录仪程序中引入消息概念,将任务的执行条件转换为消息,由消息对相应的任务进行激活,并由任务调度模块实现调度。消息定义为:当某个事件(如中断或某任务完成)发生时,事件处理程序设置相应的标志,不同的标志代表不同的消息。事件处理程序可以是中断服务程序,也可以是执行后需设置的标志的任务,因此,记录仪中任务的调度是基于消息机制来驱动的。消息在多任务程序中的作用相当于桥梁,使任务间既相互独立又有机关联,任务之间不能直接调用,需借助消息,由任务调度模块实施。

中断服务程序由中断消息(标志)处理程序和中断任务处理程序两部分组成,前者仅仅完成消息(标志)处理就退出中断,而中断真正要完成的操作,是在任务调度模块的协调下,由中断任务处理程序来完成。如按下显示,则按键中断消息处理程序只产生一个按键消息(标志)就退出中断,而调度模块依据按键消息,调用按键中断任务处理程序获取键值,并产生显示消息。调度模块依据显示消息,调用显示任务程序。

3 实时多任务调度策略

多任务的系统,通常采用内核来管理各个任务,也就是通过内核为每个任务分配CPU时间,并负责任务之间的通信。根据任务的调度机制,可以分为非占先式内核和占先式内核。前者要求每个任务能够主动释放CPU等资源,后者则支持对当前任务的CPU使用权的剥夺,从而使更高优先级就绪任务得到CPU控制权进而执行。

嵌入式系统采用何种调度策略,通常要考虑三个因素:系统的处理能力,任务的数目,系统对响应时间和执行效率的要求。抢占式调度能改善高优先级任务的实时性,但系统开销较大;非抢占式调度恰好与抢占式相反。针对记录仪,提出抢占式和非抢占式的复合多任务调度策略。记录仪的正常工作周期为1s,调度模块的工作周期亦为1s,并将1s分为三个时段:0s-0.5s,0.5-0.8s,0.8s-1s,实时时钟在0s, 0.5s, 0.8s各产生一次中断,将Time-flag分别设置为0,5,8,并将Attemper-flag置为0。任务调度程序框图如图2所示。

在记录仪一个工作周期(1s)内,复合调度策略,允许高优先级任务三次抢占低优先级和后台任务,而低优先级任务具有两次抢占后台任务的权力。因此,高优先级任务的响应时间t≤0.5s,低优先级任务的响应时间t≤0.7s。由于抢占的次数有限,所以任务切换开销不大,有利于提高系统效率。

抢占式和非抢占式的复合多任务调度策略已成功应用于某记录仪,达到了预期的目标。

首先,软件设计模块化,不同的功能模块编制成相应的任务,由调度模块按优先级别调用。而且兼顾了高优先级任务的实时性和系统运行的高效性。这样,大大降低了系统的故障率。低优先级任务发生阻塞时,高优先级任务的执行不受其影响。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

史胜辉,在MTK工作了11年,一直在基带芯片的USB驱动领域做开发和验证。从最开始做USB2.0/3.0 IP验证和驱动开发到后面带领团队做上层协议驱动开发,以及跟硬件设计部门合作开发全新的USB硬件加速器。

关键字: 基带芯片 驱动领域 驱动开发

关注「Linux大陆」,一起进步!本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。...

关键字: 嵌入式 内存管理

本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。mem_malloc代码仓库:❝https://github.com/...

关键字: 单片机 内存管理

↓推荐关注↓内存管理是C最令人切齿痛恨的问题,也是C最有争议的问题,C高手从中获得了更好的性能,更大的自由,C菜鸟的收获则是一遍一遍的检查代码和对C的痛恨,但内存管理在C中无处不在,内存泄漏几乎在每个C程序中都会发生,因...

关键字: 内存管理

以下为CPU内存管理的知识点总结,梳理图见文末。1、作为OS的基础,CPU能支持什么内存访问模型,OS就必须跟随。2、IntelCPU支持分段与分页两种模型。3、IntelCPU的访存模型是先分段再分页的模式,所以涉及到...

关键字: CPU 内存管理

关注、星标公众号,直达精彩内容来源:嵌入式大杂烩作者:ZhengNL本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。m...

关键字: 单片机 内存管理

↓推荐关注↓内存管理是C最令人切齿痛恨的问题,也是C最有争议的问题,C高手从中获得了更好的性能,更大的自由,C菜鸟的收获则是一遍一遍的检查代码和对C的痛恨,但内存管理在C中无处不在,内存泄漏几乎在每个C程序中都会发生,因...

关键字: 内存管理

摘要:操作系统的内存管理一直是计算机领域研究的一个重要方向。文中分析了几种常用内存管理中的页面置换算法及其存在的问题,提出了LUR页面置换算法的操作系统内存管理中比较接近理想算法的一种页面置换算法,并阐述了使用矩阵方法实...

关键字: 页面置换 LRU 矩阵 内存管理

‍‍大家好,我是唐唐!本文关于C内存管理学习笔记自侯捷,上次笔记见 C内存管理(一)。1.各个标准分配器实现1.1VC6.0malloc在第一节中提到,malloc的内存块布局如上,其中cookie(记录区块大小)小,浪...

关键字: 源码 内存管理

C语言内存管理指对系统内存的分配、创建、使用这一系列操作。在内存管理中,由于是操作系统内存,使用不当会造成毕竟麻烦的结果。本文将从系统内存的分配、创建出发,并且使用例子来举例说明内存管理不当会出现的情况及解决办法。一、内...

关键字: 内存管理
关闭
关闭