RTX在实时控制系统中的应用

2012-08-08 10:23肖雅静赵岁花
电子工业专用设备 2012年11期
关键词:信号量共享内存驱动程序

王 丰,刘 娜,肖雅静,赵岁花

(中国电子科技集团公司第四十五研究所,北京 100176)

随着现代科技的发展,工业控制系统一直在不断寻求更高的精度和速度,因此实时控制系统在越来越多的方面得到应用。无论是在航空、航天、医疗、军事还是在工业制造、仿真测试上,都可以看到实时系统的身影。

所谓的实时系统是指系统在接收到一个不可预测的事件后,能够迅速对其做出正确响应。它的最大特点在于:一个正确的程序运行不仅取决于结果的准确,更取决于功能实现的时间。当然,“实时”并不意味着“快”,它指的是系统的时间响应特性。换句话说,实时性的衡量标准不是系统的平均响应时间而是最坏情况下的响应时间。

实时系统具有不同的分类,按实时性能来分,实时系统可以分为硬实时系统和软实时系统。硬实时系统对响应时间的要求是严格的、绝对的,响应时间为微秒级或更强;软实时系统允许有一些小的误差,响应时间为毫秒级。通常情况下我们所说的实时系统都是指硬实时系统。一个实时系统除了其响应时间确定外,还具有其他一些优点:多线程优先级调度器;可预测的线程同步机制;具有优先级继承;快速的时钟和定时器。

Windows系统作为一种通用操作系统平台,以其友好的人机界面交互功能,在工业控制中被广泛应用。但不足之处在于Windows系统属于一个软实时、多任务系统,其响应时间无法满足某些高精度的控制领域。虽然随着微处理芯片领域的发展,其处理能力和响应时间得到显著提高,但是其最差响应时间的提高不能总是被保证,而且其线程优先级太少,隐含着不确定的线程调度机制。因此,对Windows平台进行实时扩展就显得尤为必要。

1 RTX简介

美国Ardence公司推出了一套纯软件的硬实时扩展子系统Real-Time Extension for Windows(即RTX),提供了专门针对Windows系统的嵌入式实时解决方案。相比其他的实时系统,RTX具有开发周期短,成本低等优点,并且RTX支持VC++6.0与VS.NET开发环境。RTX并不对Windows系统本身进行任何封装或修改,通过在HAL层(硬件抽象层)增加实时HAL扩展来实现基于优先级的抢占式实时任务的管理和调度。RTX实时子系统的线程优先于所有Windows线程,提供了对IRQ、I/O、内存的精确直接控制,以确保实时任务的可靠性。通过高速的IPC通信和同步机制,RTX方便地实现与Windows之间的数据交换。Windows的定时器时钟分辨率为1 ms,而RTX的定时器时钟分辨率为100 ns,最低定时器周期为 100 μs。

RTX被实现为一套库的集合 (动态库与静态库),RTSS(Real-Time Sub System)作为 Windows 的内核设备驱动与HAL扩展,其主要目的是管理实时任务的强占运行,为应用提供各种便利,快速响应外部事件,实现实时处理。RTSS通过RtWinAPI动态库的实时API提供对外部对象的访问方法。RtWinAPI可以被标准Win32环境和RTSS环境调用,将Win32程序转化为RTX程序只需要重新链接一套不同的库,Windows服务控制管理器直接将RTX进程和动态链接库(DLL)的可执行映像装入内核的不分页内存中。

RTX的主要体系结构如图1所示。

图1 RTX体系架构

2 RTX下驱动程序开发

2.1 在RTX环境中导入硬件设备

大多数硬件设备的驱动程序,都是基于Windows环境开发的,无法在RTX环境中使用。如果要在RTX环境中访问此类设备,就必须把该设备导入到RTX环境中,编写专门的驱动程序。

如图2所示 (以RTX8.1.2版本为例),打开RTX Properties面板,选择Hardware选项,在Devices栏点击Setting按钮,在弹出的Pnp Devices Setting面板上可以看到当前Windows系统下所有的即插即用设备,选择需要在RTX下访问的设备,点击鼠标右键,在弹出的菜单中选择Add RTX INF Support,确认后在Windows设备管理器中即可把设备导入到RTX环境中(图2)。

图2 RTX中导入硬件设备

2.2 编写RTX环境下设备驱动程序

RTX下编写驱动程序相对简单,因为应用程序可以直接访问硬件设备的I/O端口。以PCI设备为例,RTX提供了相关的头文件与库函数,开发人员可以使用RTX Driver Wizard创建驱动程序框架,在创建的过程中根据应用需要可以添加中断服务程序,共享中断,I/O访问,内存映射等功能函数。创建好的驱动程序包含2个重要部分:

(1)初始化设备。RTX下的硬件驱动程序首先使用DeviceSearch()函数查找PCI设备,通过指定的厂商号与设备号,遍历查找所有的PCI的插槽,找到匹配的设备以后,记录下当前的总线编号、内存与I/O端口的基地址以及相关的中断资源。

(2)内核与硬件的数据交换。开发驱动程序的目的就是为了与硬件设备进行数据交换,但硬件设备读写数据使用的是物理地址,而应用程序读写数据使用的是虚拟地址,RTX中提供RtTranslateBusAddress()和 RtMapMemory()函数来完成物理地址到虚拟地址的转化,从而完成应用程序与硬件设备的数据交换。

3 RTX与Windows的IPC通讯

一般的设备控制程序需要有一个良好的图形操作界面,RTX作为一个嵌入式的实时系统,并不直接提供支持类似MFC的图形界面类库。因此,在一个通用的控制程序中RTX常用来完成实时控制部分,而Windows用来完成与用户的交互部分,二者之间通过共享内存与互斥信号量来完成数据通讯。

3.1 共享内存

共享内存是在内存中开辟一块指定大小的区域,不同的进程都可以共享此区域,包括RTSS进程与Win32进程都可以对其进行读写访问。要使用共享内存通讯,首先必须创建共享内存对象,然后在另外一个需要通讯的进程中打开该共享内存对象。RTX中使用RtCreateSharedMeory()和RtOpenSharedMeory()来实现共享内存的创建与打开。通常情况下是在RTX应用程序中创建一个共享内存对象,创建的同时会产生一个该对象的句柄,其他进程通过获取该句柄来完成不同进程间的数据传输。

3.2 互斥信号量

由于Windows与RTX都可以对共享内存进行读写操作,为避免出现读写冲突,所以需要引入信号量机制。当RTX需要访问共享内存时,首先会向共享内存发送一个请求访问的信号量,共享内存收到此信号量后会向Windows发送一个询问的信号量。如果Windows此时已经准备好,就会给共享内存发回一个准备好的信号量,共享内存收到后再给RTX发回一个可以访问的信号量,RTX就可以对共享内存进行读写操作了。同理,当Windows需要访问共享内存时,也需要同样的操作,如图3所示。

4 RT-TCP/IP

图3 Windows与RTX通讯

在一台主机上,RTX与Windows之间可以通过共享内存来通讯。在实际应用当中,有时候需要实现2台主机之间互相通讯,普通的以太网通讯无法保证数据传输的实时性。但RTX提供了实时性能较好的RT-TCP/IP,它通过RTSS实现对底层网卡的实时支持。RTX在子系统中建立独立的TCP/IP协议。该协议栈建立在NetSilicon公司的Fusion TCP/IP协议栈的基础上,为了实现更好的实时性能,RTX对TCP/IP协议栈作了部分修改。RTX将TCP/IP协议的实现和硬件的操作集成在网卡的实时驱动中,用户无需加载额外的链接库。RT-TCP/IP给终端用户提供了许多重要参数设置,使其更加适合实时传输。另外,RTX开放了大量网卡的驱动程序源代码,给用户开发RTX下的网络通讯程序带来了极大的帮助。

5 结束语

RTX可靠的实时性已经在众多的平台上得到了验证,本文简单介绍了RTX下开发实时控制程序的一个大概流程。由于RTX只是对Windows系统的一个扩展,并不对Windows系统本身做任何改变,而且RTX对微软编译环境的支持,使得需要更高实时性能的Windows程序可以很容易地移植到RTX下,相信RTX会在实时控制中得到更多的应用。

[1] 刘心语,杨煜普.基于RTX实时环境的1394驱动程序开发[B].微计算机信息,2009,25(11-2):75-76.

[2] 方澄,徐琦.基于RTX的飞行模拟器分布式实时仿真系统[A].测控技术,2007,26(7):86-87.

[3] 刘晓川,樊子明.Windows2 000(X P)+R TX的实时性分析与测试[J].舰船电子程,2007,27(6):135-138.

[4] 付文芳,张萍.RTX下PCI9052驱动程序的开发[A].科技广场,2006(8):97-100.

[5] 吕瑛,陈怀民等。RTX环境下某智能串口卡的驱动开发[A].科学技术与工程,2007,7(5):761-764.

猜你喜欢
信号量共享内存驱动程序
通过QT实现进程间的通信
Nucleus PLUS操作系统信号量机制的研究与测试
计算机硬件设备驱动程序分析
基于Linux内核的文件服务器模型的研究与构建
基于PCI总线的多处理器协同机制研究
硬件信号量在多核处理器核间通信中的应用
基于MPC8280的CPU单元与内部总线驱动程序设计
一种高效RTAI 共享内存管理层的研究与实现*
μC/OS- -III对信号量的改进
Linux操作系统信号量机制的实时化改造