当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]本文提出在嵌入式实时操作系统上建立实时多任务软件系统时,使用软总线提供数据驱动层以处理多任务间共享资源的构架方式。该方案封装各种共享资源的操作,在操作系统上构建使资源对于其他系统任务模块构建者透明的数据驱动接口。实验结果表明该方案能较好的为各任务进程提供共享资源建立和使用的接口,同时有效地屏蔽由于进程资源共享与进程独立性的矛盾而可能产生的错误。

1.引言

随着大型嵌入式系统向着集成化和多元化方向的发展,嵌入式软件系统的复杂度也日益增大。在集成多个硬件工作模块组成的复杂系统中,要求软件系统能同时测控多个模块的同步工作,软件设计要求做到实时多任务。针对软件设计的要求,采用基于实时多任务操作系统提供的底层任务调度机制,建立软件架构成为较好的选择。本文提出了基于实时多任务操作系统,建立软件架构时采用软总线提供数据驱动层的架构模式。针对实时多任务操作系统,分析任务调度与数据驱动层。针对资源共享与任务进程独立性等问题,提出软总线在共享数据维护上的优势。

2.任务调度、共享资源与软总线结构研究

2.1 嵌入式开发任务调度和资源共享

目前主要的实时多任务操作系统(VxWorks,嵌入式Linux,WinCE)的任务调度均采用对于不同优先级抢占式调度,对同优先级采用时间片轮转调度的方法。为使低优先级任务能得到运行,软件需要能阻塞高优先级任务,同时也要能使被阻塞的任务重新就绪运行。操作系统对进程间通信资源的操作能产生这样的效果,所以在架构软件时,常借助进程间通信资源的使用。然而采用这样的方式,调度灵活性较差,同时低优先级任务对进程间通信资源的占用也始终处于劣势。任务进程较多复杂软件系统中,无法避免的会出现多进程共用资源的情况,事实上进程通信资源也是一种多进程共用的资源。进程可以对自身资源进行管理,但对于这些共享的资源,就无法只由共享者中的某一个进行管理。而这个管理却是必要的,否则进程内部的意外可能通过这些资源蔓延到其他进程,如:进程内部意外的对资源地址赋空,就会使其他共享该资源的进程在使用该资源时崩溃。这就要求在系统设计时,有独立于各个进程之外的总体的对资源管理的模块。

2.2 软总线结构

在此,本文提出软总线结构来架构复杂的软件系统,以解决任务调度和资源管理上的困难。软总线是封装了操作系统对于进程间通信资源,共享内存等有多个进程共同使用的资源操作的模块。该模块为任务进程模块提供标准的资源申请、使用及回收接口,任务进程使用该接口及协议的标识进行资源的共享。

首先,软总线封装了各种进程可能共享的资源,独立于进程之外对资源进行管理,使共享资源对于任务进程透明,任务进程无法直接操作资源。这样的处理方式使得资源本身不能被任务进程修改或破坏。任务进程获取的数据,实际是总线上数据的副本,而所有关于总线上数据的更新都需要总线模块的认证,以避免出错。总线模块在操作系统底层调用的基础上,通过封装资源、提供接口,构建了一个数据驱动层。同时,由于软总线的封装,使得在构建软件系统时,对进程的调度需要通过软总线来实施。如果在总线模块处加载系统的调度策略,可以更灵活有效地对每个资源进行任务的调度。使得一方面降低了在开发初期为任务进程设置合理优先级的难度,一方面也使得不同任务能在不同的资源处能有更为灵活的优先策略。

综合以上两点,以软总线架构底层数据驱动的方式构建实时多任务软件系统,可以有效地保护和管理共享资源并更为简单灵活对系统进行调度。

3.软总线软件架构方案

本设计基于Vxworks操作系统,试验平台包括通信、存储、复接、硬件总线与主控计算机等硬件电路板,及与硬件相对应的软件功能模块。

3.1 软件架构整体方案

本设计中,软总线封装的操作系统对于内存、信号量以及消息队列的创建、删除及使用等操作。上层与硬件功能对应的软件任务模块需要通过软总线进行对资源操作。具体的结构如图1 所示:对于功能模块本地化的资源,不强制要求使用软总线操作。

图1 软总线架构设计框图

3.2 软总线详细设计

对于软总线结构的架构方式,设计关键节点就是软总线模块。该模块负责对操作系统的资源封装和上层功能模块的资源使用请求处理。本设计中,将软总线分成两个主要的部分:资源池和管理表。资源池是软总线模块开辟的内存区域,在内存池上进行系统其他功能模块的共享资源的创建。

软总线引入了以下操作特性:资源创建于软总线的资源池,功能模块通过标示符来间接地使用资源,资源使用需要经过软总线的验证,多个进程对同一资源会有不同的操作方式和优先级,不同的资源有不同的调度策略。针对这些特性,就需要有相应的管理系统。该系统需要维护资源与标示符之间的关联、任务进程对资源的相关操作参数、资源特有的调度策略等。本文设计中软总线主要使用四个表格存储关联信息,其详细设计图如图2:

图2 软总线详细设计图

3.3 资源使用调度详细设计

为了保证资源的安全性,系统要求进程在使用资源的时候先进行进程注册和资源申请。同时,系统对资源使用的行为进行比较严格的检测。因此,进程使用资源分为三步:进程注册,进程申请资源及进程使用资源。进程注册是在进程建立的时候,同时将进程信息写入软总线的进程表加以保存。进程申请资源通常在进程建立以后第一次工作时完成,类似对资源的初始化。进程申请资源要求进程在软总线已经注册,同时要求进程对资源的参数限定符合该资源。进程使用标识符来标示所要使用的资源,如果该资源不存在,这以该进程给定的参数在资源池中建立和初始化该资源并关联进程;如果资源存在,比对参数,如果一致,直接关联进程,否则出错处理。出错处理产生以“标识符_进程编号”为标识的副本,以进一步的使用,当然同时会有出错提示。

资源使用要求进程和资源已经关联。同时使用的过程中,进程操作的是数据的副本,而对资源的更新是要受到系统的检测的。这次,副本数据的更新是实时的,这样就避免出现同步的问题。资源调度也会在资源获取前依据资源调度表中的信息进行。进程对资源申请和使用的详细调度如图 3 所示:

图3 进程对资源申请和使用的详细调度图

3.4 系统验证和安全性模拟实验

经过验证,该系统*能模块使用软总线提供的接口操作资源,其速度和效率不低于使用未封装的资源。同时,软总线的封装使得资源对功能模块透明,而且使用资源时还要求对其进行较强的验证,因此资源的安全性及系统的健壮性得到了较大幅度的提高。为了验证系统的安全性健壮性,我们进行了安全测试。在测试中,模拟了系统可能出现的各种安全漏洞。同时,与使用非软总线结构,对资源不进行强验证的系统进行比较。结果如表1:

如上表所示,使用软总线架构,系统具有更强的安全性和健壮性。

4.结束语

本文介绍了使用软总线封装系统资源,设计实时多任务嵌入式软件的架构方式。通过实际的工程实践,给出软总线的设计方案。文章通过理论分析和实验对比指出了这种架构方式在处理多任务调度和资源共享上相对普通架构的优势。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭