靳晓园 马颖劲
北京航天自动控制研究所,北京 100854
一种基于MiniGUI的多任务嵌入式软件设计
靳晓园 马颖劲
北京航天自动控制研究所,北京 100854
分析图形界面支持系统MiniGUI的消息循环机制、介绍了MiniGUI分层设计的体系结构,设计了一种基于MiniGUI的多任务多窗口嵌入式软件。该软件采用消息队列和信号量处理机制以及多窗口共用一个消息循环的设计思想,加强了基于MiniGUI的嵌入式软件的应用性,对于嵌入式软件图形开发有很强的借鉴意义。
MiniGUI ;多任务; 嵌入式软件
目前,嵌入式VxWorks操作系统已经广泛应用于航天型号中的各个领域。其传统的图形工具WindML由于绘制界面只是“点画线”的方式,绘制过程繁琐、实现功能单一,已越来越不能满足VxWorks图形应用的需要。在图形界面资源如此受限的嵌入式环境下,如何实现高效、人机交互灵活的界面应用成为嵌入式环境开发中一个重点关注的问题。
MiniGUI是一个面向嵌入式系统的轻量级图形用户界面支持系统,其优点如下:
1)提供了完备的多窗口机制,实现了类win32的消息传递机制;
2)不同于WindML字符集局限性,能够支持多字符集和多字体;
3)可以支持常见的图像文件导入Vxworks操作系统,如BMP,GIF,JPEG等;
4)支持windows的资源文件,如位图、图标、光标等。
本文以MiniGUI为参考,运行平台为Vxworks操作系统,在此基础上开发多任务的嵌入式应用,实现控制台界面的实时显示和刷新,并对实现后的软件结构进行分析与研究。
从整体结构上看,MiniGUI是分层设计的。在最底层,GAL(图形抽象层)和IAL(输入抽象层)提供底层图形接口以及鼠标和键盘的驱动,而Pthread(POSIX thread)是用于提供内核级线程支持的C函数库。中间层是MiniGUI的核心层,其中包括了窗口系统必不可少的各个模块,如图l所示。最顶层的API是提供给用户的编程接口。
图1 MiniGUI的分层设计
本设计就是依据MiniGUI提供给用户的界面编程GUI接口,利用多任务、多消息触发的软件设计思想,基于Vxworks操作系统,设计出能够实时显示和控制的嵌入式软件。
首先要说明基于MiniGUI的多任务嵌入式软件设计都包含哪些内容,然后再提出下面主要阐述的几个方面。
2.1 多任务处理方式
基于软件使用多任务方式记录、处理并显示工作台上的内容,各任务之间及其与显示内容发送方的关系如图2所示。
1)数据接收任务:基于以太网TCP协议的数据接收任务主要功能是接收并解析显示内容发送方发送的显示请求。根据解析,获得显示属性(显示内容、所在控件、控件内位置、显示颜色),并将显示属性发送到显示消息队列,以显示在控制台界面上;
2)命令发送任务:基于以太网TCP协议的数据接收任务主要功能是将空闲状态的测试命令、测试过程中的键盘输入码、定期发送的查询版本和状态信息命令等命令发送给显示内容发送方;
图2 控制显示软件的多任务处理方式
3)查询状态、版本任务:该任务不断向命令消息队列发送查询显示内容发送方的版本信息及状态信息命令,以便命令发送任务处理该命令并获得查询结果回令;
4)MiniGUI界面任务:该任务依据消息传递机制的方式处理任务,获得并向键盘处理任务发送键盘消息码,并将显示属性队列里的内容显示在控制台界面上,向命令发送任务发送需要进行某项测试的ID号;
5)键盘处理任务:处理MiniGUI界面任务发送给消息队列的键盘输入内容,并将其转换成键盘命令发送给命令发送任务;
6)数据存储任务:为了便于调试和查找问题的需要,记录用户输入的键盘消息、在控制台上显示的所有内容、软件在运行过程中的log信息。
为了保证所有通信过程的畅通、防止出现丢数漏数现象,应把2个通信任务:数据接收任务和命令发送任务的优先级设为最高。数据存储任务仅仅用于调试及排查问题需要,优先级最低,各个任务的优先级和堆栈分配关系如表1所示。
表1 任务优先级及堆栈大小分配情况
控制显示软件的6项任务相辅相成、相互制约和影响,共同完成该软件的控制和显示功能。
2.2 消息队列的处理和信号量机制
多任务的最大优点是:除堆栈之外,几乎所有的数据均是共享的,因此任务间切换、创建、删除等操作开销低;而最大缺点是:由于不同的任务共享同一个地址空间,很可能导致任务之间互相破坏数据。为了解决以上问题,控制显示软件增加了消息的处理和信号量机制,从而抑制了不同任务之间同时访问相同数据现象产生。
消息队列的处理方式就是一个任务将需要处理的内容打包形成消息,放在(send)消息队列里,另一个任务将需要处理的消息从消息队列里取出(Receive),解包后以便进行处理。在某些任务中,当大量显示内容等消息需要处理时,这种消息队列机制可以暂且放入消息队列等待处理,当处理任务空闲时,可以从消息队列依次取出消息进行处理,从而缓解了大量处理大量数据给任务带来的压力。
在一个任务中,消息放入消息队列或从消息队列取出消息的过程是不允许其他任务对该消息队列进行访问的,为防止其他任务对该消息队列进行访问,即引入了信号量处理机制。
在一个任务处理中,为防止其他的任务打断并改写第一个任务中的数据。可在第一个任务处理之前产生(Take)一个防止其他任务打断的信号量,在该任务处理完毕后释放(Give)该信号量。在该信号量释放之前,其他高优先级的任务也不能访问该任务中的数据,从而防止了在不同任务中破坏数据的现象产生。
2.3 多窗口的设计思想
MiniGUI消息循环的机制如图3所示。
图3 MiniGUI消息循环机制
可以看到,MiniGUI典型的消息循环方式下,如果一个窗口采用一个消息循环,只有当该窗口消息处理完毕退出后才能进行下一个窗口的消息处理,而上一个窗口的消息再也不会得到处理。所以,如果MiniGUI界面任务存在2个或2个以上窗口时,一个窗口对应一个消息循环的情况下,在窗口产生的消息很难得到及时处理。
为了解决以上问题,控制显示软件设计了MiniGUI多窗口单消息循环的机制。在程序启动之初即产生一个父窗口(pmStartLogoWin),由该父窗口产生3个子窗口(pmSelectWin,pmTestWin和pmShowDataWin),这3个窗口共用父窗口的消息循环,该消息循环共同处理4个窗口产生的消息。控制显示软件需要显示某个窗口时,便将该窗口显示属性设为“显示”,其他窗口显示属性设为“隐藏”。
这种多窗口的设计思想会避免多个消息循环带来的消息不能处理问题。
以MiniGUI为软件支撑,基于Vxworks的嵌入式软件融入了多任务多窗口和消息队列的处理机制,使得人机交互界面更友好、软件设计更为合理,具有一定的推广性。
[1] 于秀霞.嵌入式监控系统中MiniGUI的编程与实现[J].长春大学学报,2009,19(6):58-60.(YU Xiuxia. Programme and Realization of MiniGUI on Embedded Monitor System[J].ChangChun University Transaction, 2009,19(6):58-60.)
[2] 保云,王锐.MiniGUI消息机制探讨[J].计算机科学,2006,33(9):188-189.(BAO Yun, WANG Rui. Discussion on MiniGui Message Mechanism[J].Computer Science, 2006,33(9):188-189.)
[3] 郡献鹏,郭玉东.MiniGuI——面向嵌入式系统的GUI系统[J].信息工程大学学报,2001,2(3):8-10.(JUN Xianpeng, GUO Yudong.MiniGUI—GUI System Faced on Embedded System[J].Information Engineering University Transaction, 2001,2(3):8-10.)
[4] 明芳,徐凌,王刚.基于VxWorks系统的MiniGUI图形界面开发[J].计算机与数字工程,2007,35(7):189-191.(MING Fang, XU Ling,WANG Gang.MiniGUI Graphical Interfaces Exploitation Based on Vxworks System[J].Computer and Digital Engineering, 2007,35(7):189-191.)
The Design of Embedded Software Based on MiniGUI and Multitask
JIN Xiaoyuan MA Yingjin
Beijing Aerospace Automatic Control Institute,Beijing 100854,China
ThemechanismofmessagecirculationbasedonGUIsystemMiniGUIisanalyzed,andthesystemstructureofMiniGUIdelaminationdesignisintroduced.AndaembeddedsoftwarebasedonMiniGui,multitaskandmultiwindowisdesigned.Thisdesignideaofmessagequeue,semaphoremanagementandamessagecirculationusedbymultiwindowisappliedinthissoftware.TheapplicationofembeddedsoftwarebasedonMiniGUIisenhancedbyusingthisfunctionandthissoftwarehasfairreferencevaluefortheGUIdesignofembeddedsoftware.
MiniGUI;Multitask;Embeddedsoftware
2011-09-01
靳晓园(1984-),女,山东枣庄人,助理工程师,主要研究方向为嵌入式软件综合设计和软件工程;马颖劲(1977-),男,江西上饶人,工程师,主要研究方向为嵌入式软件的开发设计。
TP311.52
A
1006-3242(2012)03-0065-04