微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式实时系统设计模式的研究与应用

基于嵌入式实时系统设计模式的研究与应用

时间:02-20 来源:互联网 点击:

是对设计中一般问题的抽象,所以针对具体应用的匹配以及实例化是可根据需要对ERTSDP变动的。譬如,需求分析阶段可以根据问题的复杂性对描述手段任意组合;系统工程阶段也是微周期中的可选部分;如果系统非常复杂,可以递归调用子系统视图对系统分解、分级细化;还可在体系结构设计时增加Activity图实现对任务的划分,增加sequence图对系统运行流程描述。

总之,在具体应用中可以灵活的应用模式来辅助设计。下面通过对常见的嵌入式实时系统--远程监控系统应用ERTSDP模式进行分析和设计,阐述了实例化模式的方法,同时也是对这一模式的讨论和验证。

3 基于ERTSDP的远程监控系统

3.1 系统需求分析

远程监控系统现在已经深透到社会的各个方面,简而言之,远程监控系统就是将现场设备的运行数据发送至远端加以监测和控制。本系统投入运行后预期的用户有三类:普通用户、系统管理员、故障专家。他们具有不同的职责,因而赋予了不同的权限。图1的Use Case框图可以清晰地反映出他们各自的权限职责。

图1 远程监控系统的Use Case框图

3.2 系统体系结构设计

本系统包含三个子系统--NetWeb、NetIO和RemoteClient(见图2)。NetWeb是整个系统的核心,承担着实时/历史数据管理、报警条件检测,存贮用户组态信息等功能;NetIO用于实现现场数据的采集(输入)和装置的控制(输出);RemoteClient则实现了客户端图形用户界面的功能。其中NetWeb和NetIO通过RS485总线进行通讯,NetWeb 和RemoteClient则通过socket进行信息交换。

NetWeb运行在嵌入式开发板上,操作系统是自主研发的嵌入式实时Linux,采用的方案设计是uClinux+RTAI。

图2 远程监控系统的五层体系结构视图

3.3 子系统视图

子系统视图是表示重要子系统的类图,多用于对系统进行细化时。图3是细化后的NetWeb子系统,从图中可以看到,特殊的双内核OS--uClinx+RTAI决定了NetWeb模块分为实时应用和非实时应用。下面将从初始化和运行两方面对图3详细解释。

图3 NetWeb模块的子系统视图

3.3.1 NetWeb子系统初始化

NetWeb子系统初始化过程主要由KernelInit模块和UserInit模块(图中灰色的模块)实现。首先KernelInit模块执行,完成内核空间的初始化任务;然后启动UserInit模块,这个过程比较复杂,首先Store模块将系统存储的配置信息和数据信息传给UserInit模块(标注{1}所示),然后KernelInit模块驱动485Driver模块实时采集当前模块的信息,传送给UserInit模块(标注{3}、{2}所示),UserInit模块经过两者信息的比较,确定采集的对象,以及模块信息的变更、系统状态的变更等,最终完成初始化工作。

3.3.2 NetWeb子系统运行流程

当系统完成初始化开始运行后,Gather模块调用485Driver模块相关接口API对底层32个NetIO模块进行轮询式采集,采集上来的数据经过过滤整合后,正常的数据传送至Transfer模块,这时调用RTAI内核中的RT_SHM模块实现内核和用户空间大规模数据的共享(见标注{4})。Receive模块从RT_SHM接受到数据,送到Store模块存储,然后根据用户要求送到Socket模块传到远程客户端。如果过滤整合时发现数据异常,就驱动AlarmKernel模块,这个模块启动RTAI的RT_FIFO模块,将需报警数据通过管道(见标注{5})传送至用户空间的AlarmUser模块。AlarmUser模块再驱动Email模块以邮件的形式完成报警。

3.4 资源并发视图

本系统中任务间资源共享的方式主要有两种:共享内存和消息队列。图4和图5分别对这两种资源共享方式采用并发视图进行了分析。

图4 共享内存访问并发视图

共享内存对于大规模的数据共享非常适用,这里讨论的是RTAI提供的实时SHM。RT_SHM并没有提供任何互斥机制来控制实时进程和非实时进程访问同步性(对于实时任务或非实时任务之间的共享有保护措施,故不再考虑),虽然可以自己实现一些lock机制来控制,但是考虑到内核任务的优先级远高于用户任务,即实时任务从来不会被非实时任务中断,所以实时任务对共享区写数据时永远是一次性写完所有模块信息,而且这些数据的时间戳是一致的,可以保证数据的正确性(如图4);而非实时任务读共享数据时是可能发生过程中被中断的情况,导致可能一次读取的模块数据的时间戳不一致。但实际中写进程的速度远远大于读进程的速度,同时考虑到实际运行时模块数据变化是连续的,同一模块不同时间戳采集的数据变化率不会很大,而现阶段读进程只要满足用户需要的刷新频率(QoS)就足够了,所以对于数据部分丢失现阶段并不可惜。

图5 消息队列访问并发视图

消息队列提供了一种传输多条消息的机制。如图5所示,Sender线程因响应evRun事件

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top