基于嵌入式Linux和MiniGUI为平台的智能导诊系统设计
扫描二维码
随时随地手机看文章
通过研究基于MIPS架构的SMP8654芯片的硬件架构,并且利用芯片内部的图形加速引擎GFX的方式实现了具有高清视频显示和图片文字处理功能的播放器。系统以嵌入式Linux和MiniGUI为平台设计了智能导诊系统,提高了医院的导诊就医的服务效率。智能导诊系统能够播放医院相关的健康宣传资料、专家排班信息。
MIPS微处理器是指无内部互锁流水级的处理器,它是由斯坦福大学的Hennessy教授领导的研究小组研制出来的。MIPS微处理器采用RISC(Recluced InstructionSet Computer)的设计原则,只支持有限的机器指令以及简单的算术指令,通过提供大量的内部寄存器减少内存访问次数。MIPS有32个通用寄存器,每个寄存器拥有32位的地址空间。系统通过研究基于MIPS架构的SMP8654芯片,设计和实现了高清播放器的视频播放以及图片字体显示功能。SMP8654解决方案是Sigma公司依据MIPS设计公司指导的全新设计方案,是Sigma公司专为满足高清视频播放应用需求而设计的全新芯片。和基于ARM架构的低端芯片相比,SMP8654的视频处理能力更加优越。
1 基于SMP8654芯片的高清播放器
1.1 SMP8654硬件介绍
SMP8654芯片的内部,有一个MIPS 24kf系列的主CPU芯片,工作频率为500 MHz。在主CPU芯片的内部,具有1个32 KB的指令Cache和1个32 KB的数据Cache、2个可编程计时器以及3个独立的中断控制器和2路UART(Universal Asynchronous Receiver/Transmitter)。主CPU内部采用双总线结构,G-bus是主总线,CPU通过此总线访问外部功能单元的各状态寄存器,而对主CPU芯片内部的中断控制器、计时器等的访问是通过将L-bus映射到G-Bus上的方式进行的。主CPU内部有一个高效的乘除运算单元(Multiply/Divide Unit)及浮点数运算单元(FPU),还有一个增强的JTAG调试模块,用于调试应用程序及内核代码。
SMP8654芯片内部有一个IPU(Interrupt ProcesslngUnit)。这个MIPS 24kf系列的32位处理器专门处理那些需要低延时的应用需求。它主要处理从视频处理子系统(Video Processing Subsystem)所产生的中断。它的时钟频率为333 MHz,而且还有16 KB的指令Cache和16KB数据Cache。
SMP8654芯片包含两个DDR-DRAM控制器,每一个控制都支持高达512 MB的DDR2内存,这些外部存储器可以为音频、视频以及数据提供缓冲区,并且能存放硬件模块的临时数据。
1.2 SMP8654的视频及音频处理
1.2.1 视频解码子系统
SMP8654的视频解码子系统(Video Decoder Subsystem)可以解码HDSMPTE、H.264、HD WMV9、AVS、MPEG1、MPEG2等视频格式的视频文件。SMP8654的视频解码系统执行特定解码算法,它是一种基于处理器和电路逻辑方式的混合架构。能同时解码的视频文件数目是由视频的格式以及所要呈现的分辨率决定的。SMP8654可以支持包括IPTV、AVCHD、MSTV的视频解码要求。视频处理引擎是一个16位的RISC处理器,视频解压算法的密集计算部分是由此部分处理的。
1.2.2 视频处理子系统
视频处理子系统(Video Processing Subsystem)从内存中检索图形和视频图像,将这些图像混合并且缩放至某个显示器所要求的分辨率并且将其呈现出来。视频处理子系统可以控制颜色、分辨率以及色彩饱和度,并且能处理视频数据转换,选择视频的输出模式(模拟信号的输出模式包括RGB、YPbPr)。视频处理子系统还有一个2D图形加速功能模块。智能导诊系统利用此GFX引擎实现了文字和图片的高清显示功能。
1.2.3 音频处理子系统
SMP8654芯片的集成音频处理子系统(Audio)Processing Subsystem)是一个为用户专门设计的32位数字信号处理器,音频的解码和操作是由这个专用的DSP处理的。这个DSP工作在333 MHz的时钟频率下,指令和数据是分开存储的,DSP通过系统总线取得指令,通过数据总线获取需要解码的音频数据。和基于ARM架构的处理器一样,它有一个32位的指令系统,同时与之对应了一个16位的指令集,通过Load/Store从内存装载数据到DSP的相关寄存器中进行处理。
1.2.4 高清播放机硬件架构
高清播放机硬件架构如图1所示。高清播放器实现的功能主要包括视频处理以及图片文字显示。硬件架构中的重要部分包括视频解码子系统、视频处理子系统、音频处理子系统。这里的HDD表示可选的硬盘,通过内部的SATA接口控制。提供对USB2.0协议支持以及802.11n协议的支持,也就是说播放器可以从网络中读取各种视频资源,从硬盘或者是USB等移动盘中获得数据。视频处理子系统中的GFX代表的是图形加速引擎,通过Sigma公司提供的SDK可以很容易地操作这些硬件,实现硬件加速功能。在智能导诊系统的软件部分,介绍了如何利用硬件特性加速文字和图片的绘制过程。在智能导诊系统中,医院HIS系统中的病人挂号信息通过TCP/IP传递到此硬件播放器,然后再由硬件播放器处理,将病人信息排队到相关队列中,这样病人就可以在专门的等候区休息等候了。
2 基于嵌入式Linux和MiniGUI的主控程序
2.1 嵌入式Linux
Linux是一个完全免费的开源操作系统,内核可以被裁剪到134 KB左右。Linux是一个能够适应多种CPU和硬件平台的操作系统,裁剪之后的Linux系统用于这些设备中执行资源管理、任务调度、存储空间分配等任务。嵌入式应用系统的开发一般可以分为如下几个步骤:交叉编译工具的建立,Bootloader的编译和烧写,编译内核并移植到开发板,文件系统的编译和烧写。交叉编译是嵌入式系统开发中需要用到的一个常见技术,其主要特征是嵌入式设备上的可执行程序通常是在另外一台机器上编译生成的。通常将前者称为目标机器(Target),后者称为主机(Host)。主机拥有的资源丰富很适合在上面编译机器相关的代码,这种技术为软件的不同平台移植创造了便利条件。交叉编译工具配置在主机(Host)上编译及配置环境变量后,就可以用来编译Bootloader、内核和文件系统。Bootloader是一个启动加载Linux内核的固件程序,有点类似于PC机的BIOS程序,在完成硬件初始化以及内存映射等操作之后,通常会将外部存储介质上存放的内核镜像加载到RAM中,然后跳转到指定的内存位置执行。
2.2 MiniGUI用户界面
GUI(GraphICal User Interface)是指采用图形方式显示的计算机操作用户界面。系统中所要阐述的高清播放机上需要提供人机交互界面,控制诸如视频的暂停、播放、文件更新以及播放机的声音控制和开关机控制等图形界面。智能导诊系统中使用的图形用户界面采用的是MiniGUI。MiniGUI是一个跨平台的面向嵌入式系统的轻量级图形用户界面支持系统,可在Linux/μClinux、eCos、μC/OS-II、VxWorks、pSOS、ThreadX等操作系统以及Win32平台上运行,广泛应用于手持信息终端、机顶盒、工业控制系统、便携式多媒体播放器机等产品和领域。
3 播放机软件系统设计
3.1 智能导诊系统的软件架构
SMP8654为应用开发提供分层服务架构,软件系统设计主要根据SMP8654分层服务模型,找出最优化的设计方案。智能导诊通过研究DCC的控制逻辑,及Sigma公司的SDK文档,设计出了如图2所示的SMP8654高清播放机的软件系统架构。智能导诊系统首先对硬件平台初始化,接着初始化有线或者无线网络(这部分主要作用是网络接口卡初始化操作,日志部分初始化是跟踪和调试应用程序的重要组成部分);接着创建MiniGUI主窗口,最后进入消息循环。
当MiniGUI接收到MSG_CLOSE消息时,由HWNDDESKTOP向主窗口发送退出消息,至此程序结束,播放机被关闭;当播放机接收到图片显示命令时,将命令消息存入到消息队列中,这里要创建消息队列是因为MiniGUI在接收到用户的各种不同命令时,都会将命令解析并且存入到任务队列中,由任务派发器将任务发送到不同模块处理。MiniGUI的主程序会根据用户选择的视频及音频文件,选择将消息发送到视频解码进程处理,当用户选择打开某个高清的图片时,消息队列中会保留图片大小、图片格式、图片的显示时间等控制信息。这里要使用任务队列的原因其实很简单,分离出播放器的一个个任务,让不同的软件服务模块处理。如果要播放视频,调度程序会将任务队列中的视频播放任务派发给视频解码进程处理。如果要使用GFX引擎高效率绘制图片,则任务被分派到高清图片处理进程处理。
智能导诊系统服务进程主要负责从医院HIS信息系统的接口函数中获得当前病人的挂号信息,并且通过TCP发送到高清播放机上,最后通过MiniGUI的Draw Text函数将相关病人信息以列表的方式显示在预先定义的排队队列中。这里的视频解码进程是独立的进程,主控程序和此进程的通信是通过Linux的消息队列机制实现的。消息队列是一种内核标示,两个进程之间的交互是通过调用msgsnd和msgrecv这样的函数实现的,只要两个进程的消息队列标识是一致的,进程之间就可以交互。当MiniGUI接收到退出消息时,会向视频解码进程发送退出消息,让视频解码进程清空所占用的系统资源。
SMP8654分层服务模型如图3所示。最下面的一层是相关硬件,如CPU、视频解码器、音频解码器、并行I/O接口。中间的一层M