📄 基于 linux 和 minigui 的嵌入式系统软件开发指南(一).htm
字号:
的这种设计,无法处理达到完整的多窗口支持,这的确是一个结构设计上的不足和缺陷。不过,这实际是 MiniGUI-Lite
不同于其他窗口系统的一个特征。因为处理每个进程之间的互相剪切问题,将导致客户和服务器之间的通讯量大大增加,但实际上在许多嵌入式系统当中这种处理是没有必要的。在类似
PDA
的嵌入式系统中,往往各个程序启动后,就独占屏幕进行绘制输出,其他程序根本就没有必要知道它现在的窗口被别的进程剪切了,因为它根本就没有机会输出到屏幕上。所以,在
MiniGUI-Lite
当中,当一个进程成为最顶层程序时,服务器会保证其输出正常,而当有新的程序成为最顶层程序时,服务器也会保证其他程序不能输出到屏幕上。但这些进程依然在正常执行着,不过,服务器只向最顶层的程序发送外部事件消息。<BR><BR>
表 1 给出了 MiniGUI-Threads 和 MiniGUI-Lite
的区别。从表中总结的区别看来,MiniGUI-Threads 适合于功能单一、实时性要求很高的系统,比如工业控制系统;而
MiniGUI-Lite 适合于功能丰富、结构复杂、显示屏幕较小的系统,比如 PDA
等信息产品。<BR><BR> 表 1 MiniGUI-Threads 和 MiniGUI-Lite
的区别</P>
<TABLE height=282 borderColorDark=#ffffff cellPadding=0 width=583
borderColorLight=#000000 border=1>
<TBODY>
<TR>
<TD width=78 height=19><FONT color=#ffffff>.</FONT></TD>
<TD width=188 height=19>MiniGUI-Threads</TD>
<TD width=297 height=19>MiniGUI-Lite</TD></TR>
<TR>
<TD width=78 height=37>多窗口支持</TD>
<TD width=188 height=37>完全</TD>
<TD width=297 height=37>不能处理进程间窗口的剪切,但提供进程内多窗口的完全支持</TD></TR>
<TR>
<TD width=78 height=57>字体支持</TD>
<TD width=188 height=57>支持点阵字体(VBF、RBF)和矢量字体(Adobe Type1 和
TrueType)</TD>
<TD width=297 height=57>目前尚不支持对 Adobe Type1 和 TrueType
等矢量字体的支持</TD></TR>
<TR>
<TD width=78 height=38>线程间消息传递</TD>
<TD width=188 height=38>通过 MiniGUI 的消息函数,可在不同的线程之间传递消息</TD>
<TD width=297 height=38>未考虑多线程应用,不能直接通过 MiniGUI
消息函数在不同线程之间传递消息</TD></TR>
<TR>
<TD width=78 height=38>多线程窗口</TD>
<TD width=188 height=38>MiniGUI 能够处理不同线程之间的窗口层叠</TD>
<TD width=297 height=38>不能处理多线程之间的窗口层叠</TD></TR>
<TR>
<TD width=78 height=57>其他</TD>
<TD width=188 height=57>基于线程的 C/S 结构,系统健壮性较差,因此要求系统经过严格测试</TD>
<TD width=297 height=57>采用 UNIX Domain Socket 的基于进程的 C/S
结构,可建立健壮的软件架构。并提供了方便的高层 IPC 机制</TD></TR></TBODY></TABLE>
<P> 除上表中列出的不同之外,MiniGUI-Threads 和 MiniGUI-Lite 的
API 是一致的。<BR><BR> <B>3:MiniGUI-Threads
的典型应用和软件架构</B></P>
<P> 本文介绍的基于 MiniGUI-Threads
典型应用是一个计算机数字控制(CNC)系统。这个系统是由清华大学基于 RT-Linux 建立的机床控制系统。该系统使用
MiniGUI-Threads 作为图形用户界面支持系统。图 1 是该 CNC 系统的用户界面。</P>
<P align=center><A
href="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/2001070301Image01.gif"
target=_blank><IMG height=375
alt="清华大学基于 RT-Linux 和 MiniGUI 的数控系统主界面"
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/2001070301Image01.gif"
width=500 align=center border=0></A></P>
<P align=center>图 1 清华大学基于 RT-Linux 和 MiniGUI 的数控系统主界面</P>
<P> 图 2 是该系统的架构。在用户层,该系统有三个线程,一个作为 GUI
主线程存在,另一个作为监视线程监视系统的工作状态,并在该线程建立的窗口上输出状态信息,第三个线程是工作线程,该线程执行加工指令,并通过
RT-Linux 的实时 FIFO 和系统的实时模块进行通讯。</P>
<P align=center><IMG height=178
alt="清华大学基于 RT-Linux 和 MiniGUI 的数控系统架构"
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/2001070301Image02.gif"
width=351 border=0></P>
<P align=center>图 2 清华大学基于 RT-Linux 和 MiniGUI 的数控系统架构</P>
<P> <B>4:MiniGUI-Lite 的典型应用和软件架构</B></P>
<P> 这里介绍的典型应用是一个基于 MiniGUI-Lite 的 PDA。该 PDA
由国内某公司基于 Linux 开发,其上可以运行各种 PIM 程序、浏览器以及各种游戏程序。图 3 是该 PDA 的用户界面。</P>
<P align=center><IMG height=320
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/2001070301Image03.jpg"
width=240 border=0></P>
<P align=center>图 3 某公司开发的基于 MiniGUI 的 PDA 软件界面</P>
<P> 该系统中的所有应用程序都以 Linux 进程的形式执行,mginit(即
MiniGUI-Lite)提供了输入法支持和应用程序管理功能。当应用程序之间需要通讯时,可以通过 MiniGUI-Lite 所提供的
request/response 接口实现。图 4 是该系统的架构。</P>
<P align=center><IMG height=218 alt="某公司开发的基于 MiniGUI 的 PDA 软件架构"
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/2001070301Image04.gif"
width=351 border=0></P>
<P align=center>图 4 某公司开发的基于 MiniGUI 的 PDA 软件架构</P>
<P> <B>5:小结</B></P>
<P> 本文讲解了 MiniGUI-Threads 和 MiniGUI-Lite
之间的区别,并举例说明了基于这两个不同版本的不同软件架构。嵌入式程序开发人员必须明白这两个版本之间的区别,并针对具体应用恰当选择使用哪个版本。</P>
<P> <B>作者简介</B></P>
<P> 魏永明(<A
href="mailto:ymwei@minigui.org">ymwei@minigui.org</A>),男,27
岁,工学硕士。国内最有影响的自由软件项目之一--MiniGUI 的创始人及主要开发人员。著有《Linux 实用教程》与《学用 Linux
与 Windows NT》,并主持翻译了《Red Hat Linux 奥秘》、《Linux 编程宝典》 等大量优秀的 Linux
技术著作。是清华大学 AKA Linux 编程技术系列讲座的主讲人。 </P>
<P><B> 本站声明:</B>本文出处<A
href="http://www.cn.ibm.com/developerWorks/linux/index.shtml"
target=_blank>IBM : developerWorks 中国网站</A>,如果有其他Linux站点需要转载本文,请与<A
href="http://www.cn.ibm.com/developerWorks/linux/index.shtml"
target=_blank>IBM : developerWorks 中国网站</A>联系,或与<A
href="mailto:ymwei@minigui.org">魏先生</A>联系。任何读者对本站转载提出意见,<A
href="mailto:web@pocketix.com">请与我站联系</A>。
</P></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE height=10 cellSpacing=0 cellPadding=0 width="50%" border=0>
<TBODY>
<TR>
<TD width="100%" height=10></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD width="100%"><FONT size=2>本文出处:<FONT class=txd size=2>【<A
href="http://www.cn.ibm.com/developerWorks/linux/index.shtml"
target=_blank>IBM : developerWorks
中国网站</A></FONT>】</FONT></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=left width="50%"><INPUT style="COLOR: #000000; BORDER-TOP-STYLE: inset; BORDER-RIGHT-STYLE: inset; BORDER-LEFT-STYLE: inset; BACKGROUND-COLOR: #ffbd00; BORDER-BOTTOM-STYLE: inset" onclick=javascript:window.close() type=button value=关闭窗口>
</TD>
<TD vAlign=bottom align=right width="50%"><A
href="http://www.pocketix.com.cn/" target=_top><IMG height=46
alt=博利思软件有限公司
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/penguin56a1.gif"
width=40 border=0></A></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD width="100%">
<HR SIZE=1>
</TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD align=middle width="100%"><FONT size=2>版权所有,需要转载请<A
href="mailto:web@pocketix.com">联系通知我们</A>,嵌入式Linux</FONT></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></CENTER></DIV>
<TABLE height=15 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%" background=""
height=15></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -