本系统采用嵌入式Linux作为操作系统,在Linux平台下编写虚拟仪表的驱动程序和应用程序,采用QT/embedded设计虚拟仪表软面板。应用程序的主要功能有,当接收到各个经转换处理的传感器采集到的信号后,将其有用的数据提取并加以存储,然后调用仪表显示程序,将需要显示的内容显示到不同的虚拟仪表盘中,同时并行判断各项参数是否正常,若出现异常则调用语音报警程序和显示程序提示报警。虚拟仪表软件结构图如图3所示。虚拟仪表软件开发主要有2个内容:开发环境的搭建、虚拟仪表应用程序的设计。
图3 虚拟仪表的软件结构图
3.1 开发环境的搭建
为了开发满足功能的应用程序,本文采用的软件开发环境是Vmware WorkStation 7虚拟机和Fedora 13操作系统,在此环境中安装交叉编译器ARM-linux-gcc 4.5.1,用来完成包含相关驱动程序的虚拟仪表系统内核、QT库和应用程序的编译;编译安装QT/Embedded库,用来支持虚拟仪表人机交互界面程序的开发并生成虚拟仪表系统中需要的QT库文件;编译Tslib触摸屏库,为虚拟仪表系统添加触摸屏支持;在Fedora13系统中安装QT Creator软件,用于完成虚拟仪表系统应用程序的开发;移植嵌入式设备的系统引导程序U-boot;编写硬件平台相关驱动,然后裁剪编译Linux2.6.10内核并在其中加载已编译的相关驱动;制作硬件平台需要的根文件系统,在其中移植已配置、编译过的tslib库和QT/Embedded库。
3.2 应用程序开发
本虚拟仪表系统的的应用程序基于QT/Embedded平台,使用QT的轻量级集成开发环境QT Creator完成开发,最后在已搭建的开发环境中编译生成可执行二进制文件,并将其移植到硬件平台中的文件系统中进行测试。
虚拟仪表系统应用程序的主要工作流程如图4所示,在系统上电后,应用程序开始运行,要实现汽车虚拟仪表系统的功能,应用程序需要完成虚拟仪表面板和后台处理程序的开发:
图4 系统软件工作流程图
3.2.1 虚拟仪表面板的绘制
虚拟仪表面板主要将汽车的一些基本状态在LCD上通过表盘和数字直观、动态的显示出来,本设计中采用速度、油量、电池电量、时间日期、安全带、安全气囊、行驶里程等状态。
为了提高本虚拟仪表的可扩展性和可维护性,在本设计中,为每种具体的虚拟仪表对象定义一个抽象类。
下面即以仪表盘类(QMeter)为例介绍本系统中虚拟仪器面板的绘制。
在需要显示的各种状态中,速度和油量通常以仪表盘形式显示,虚拟仪表模块中的虚拟仪表盘采用QT的二维图形引擎的基础类QPainter开发。QPainter具有丰富的图形图像绘制函数,并支持反走样、渐变填充、像素混合、线性变换等特性,利用这些函数完成仪表盘的绘制。
QMeter类的定义如下:

3.2.2 后台处理程序
后台处理程序主要将系统下层采集的数据进行分析处理,将有用的数据传送至虚拟仪表面板显示,实现虚拟仪表的动态显示,同时以多线程的方式不断检测汽车各项状态,当某项状态出现异常或存在危险时驱动LCD和语音芯片向驾驶员报警,其中异常状态有超速、存油量过低、电池电量过低等。下面以报警子程序为例讲解后台处理子程序。
报警子程序在后台处理程序中新建一个线程,通过多线程的方式以轮询的方式查询各个传感器的状态,当发现某个状态存在危险时,驱动语音芯片发出相应的报警信息。其定义如下: