📄 基于 linux 和 minigui 的嵌入式系统软件开发指南(一).htm
字号:
<LI>有一个服务器进程(mginit),它负责初始化一些输入设备,并且通过 UNIX Domain 套接字将输入设备的消息发送到前台的
MiniGUI-Lite 客户进程。
<LI>服务器和客户被分别限定在屏幕的某两个不相交矩形内进行绘制,同一时刻,只能有一个客户及服务器进行屏幕绘制。其他客户可继续运行,但屏幕输入被屏蔽。服务器可以利用
API 接口将某个客户切换到前台。同时,服务器和客户之间采用信号和 System V 信号量进行同步。
<LI>服务器还采用 System V IPC 机制提供一些资源的共享,包括位图、图标、鼠标、字体等等,以便减少实际内存的消耗。
</LI></UL><BR><BR>
<P>从传统 C/S 窗口系统的角度看,MiniGUI-Lite
的这种设计,无法处理达到完整的多窗口支持,这的确是一个结构设计上的不足和缺陷。不过,这实际是 MiniGUI-Lite
不同于其他窗口系统的一个特征。因为处理每个进程之间的互相剪切问题,将导致客户和服务器之间的通讯量大大增加,但实际上在许多嵌入式系统当中这种处理是没有必要的。在类似
PDA
的嵌入式系统中,往往各个程序启动后,就独占屏幕进行绘制输出,其他程序根本就没有必要知道它现在的窗口被别的进程剪切了,因为它根本就没有机会输出到屏幕上。所以,在
MiniGUI-Lite
当中,当一个进程成为最顶层程序时,服务器会保证其输出正常,而当有新的程序成为最顶层程序时,服务器也会保证其他程序不能输出到屏幕上。但这些进程依然在正常执行着,不过,服务器只向最顶层的程序发送外部事件消息。</P>
<P>表 1 给出了 MiniGUI-Threads 和 MiniGUI-Lite 的区别。从表中总结的区别看来,MiniGUI-Threads
适合于功能单一、实时性要求很高的系统,比如工业控制系统;而 MiniGUI-Lite 适合于功能丰富、结构复杂、显示屏幕较小的系统,比如 PDA
等信息产品。</P>
<P>表 1 MiniGUI-Threads 和 MiniGUI-Lite 的区别</P>
<TABLE cellSpacing=0 cellPadding=3 width="90%" align=center border=1>
<TBODY>
<TR>
<TD></TD>
<TD>MiniGUI-Threads</TD>
<TD>MiniGUI-Lite</TD></TR>
<TR>
<TD>多窗口支持</TD>
<TD>完全</TD>
<TD>不能处理进程间窗口的剪切,但提供进程内多窗口的完全支持</TD></TR>
<TR>
<TD>字体支持</TD>
<TD>支持点阵字体(VBF、RBF)和矢量字体(Adobe Type1 和 TrueType)</TD>
<TD>目前尚不支持对 Adobe Type1 和 TrueType 等矢量字体的支持</TD></TR>
<TR>
<TD>线程间消息传递</TD>
<TD>通过 MiniGUI 的消息函数,可在不同的线程之间传递消息</TD>
<TD>未考虑多线程应用,不能直接通过 MiniGUI 消息函数在不同线程之间传递消息</TD></TR>
<TR>
<TD>多线程窗口</TD>
<TD>MiniGUI 能够处理不同线程之间的窗口层叠</TD>
<TD>不能处理多线程之间的窗口层叠</TD></TR>
<TR>
<TD>其他</TD>
<TD>基于线程的 C/S 结构,系统健壮性较差,因此要求系统经过严格测试</TD>
<TD>采用 UNIX Domain Socket 的基于进程的 C/S 结构,可建立健壮的软件架构。并提供了方便的高层 IPC
机制</TD></TR></TBODY></TABLE>除上表中列出的不同之外,MiniGUI-Threads 和 MiniGUI-Lite 的
API 是一致的。<BR><BR>
<P><A id=3 name=3><SPAN class=atitle2>3:MiniGUI-Threads
的典型应用和软件架构</SPAN></A><BR>本文介绍的基于 MiniGUI-Threads
典型应用是一个计算机数字控制(CNC)系统。这个系统是由清华大学基于 RT-Linux 建立的机床控制系统。该系统使用
MiniGUI-Threads 作为图形用户界面支持系统。图 1 是该 CNC 系统的用户界面。</P>
<P align=center><IMG height=600 alt="清华大学基于 RT-Linux 和 MiniGUI 的数控系统主界面"
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/Image01.gif" width=800
border=0><BR>图 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/Image02.gif" width=351
border=0><BR>图 2 清华大学基于 RT-Linux 和 MiniGUI 的数控系统架构</P>
<P><A id=4 name=4><SPAN class=atitle2>4:MiniGUI-Lite
的典型应用和软件架构</SPAN></A><BR>这里介绍的典型应用是一个基于 MiniGUI-Lite 的 PDA。该 PDA 由国内某公司基于
Linux 开发,其上可以运行各种 PIM 程序、浏览器以及各种游戏程序。图 3 是该 PDA 的用户界面。</P>
<P align=center><IMG height=320 alt="某公司开发的基于 MiniGUI 的 PDA 软件界面"
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/Image03.jpg" width=240
border=0><BR>图 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/Image04.gif" width=351
border=0><BR>图 4 某公司开发的基于 MiniGUI 的 PDA 软件架构</P>
<P><A id=5 name=5><SPAN class=atitle2>5:小结</SPAN></A><BR>本文讲解了
MiniGUI-Threads 和 MiniGUI-Lite
之间的区别,并举例说明了基于这两个不同版本的不同软件架构。嵌入式程序开发人员必须明白这两个版本之间的区别,并针对具体应用恰当选择使用哪个版本。</P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A id=author1 name=author1><SPAN class=atitle2>作者简介</SPAN></A>
<BR>魏永明(<A
href="mailto:ymwei@minigui.org">ymwei@minigui.org</A>),男,27
岁,工学硕士。国内最有影响的自由软件项目之一--MiniGUI 的创始人及主要开发人员。著有《Linux 实用教程》与《学用 Linux
与 Windows NT》,并主持翻译了《Red Hat Linux 奥秘》、《Linux 编程宝典》 等大量优秀的 Linux
技术著作。是清华大学 AKA Linux 编程技术系列讲座的主讲人。</TD></TR></TBODY></TABLE><!-- END PAPER BODY --></TD>
<TD width=10><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=10
border=0></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=100 border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD align=right width="100%"><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/guide/part1/index.shtml#top">到页首</A></TD>
<TD width=5><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=5
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=2><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=2><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD>
<FORM action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden value="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一)"
name=ArticleTitle> <INPUT type=hidden value=linux name=Zone> <INPUT
type=hidden value=/developerWorks/cn/thankyou/feedback-linux.html
name=RedirectURL> <A id=rating name=rating><B>您对这篇文章的看法如何?</B></A>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD colSpan=5><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD width="16%"><INPUT type=radio value=5 name=Rating>真棒!(5)</TD>
<TD width="20%"><INPUT type=radio value=4 name=Rating>好材料 (4)</TD>
<TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 (3)</TD>
<TD width="22%"><INPUT type=radio value=2 name=Rating>需提高 (2)</TD>
<TD width="18%"><INPUT type=radio value=1 name=Rating>太差!
(1)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China
2001, All Right Reserved</TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead">关于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead">隐私条约</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead">使用条款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead">联系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="D:\新建文件夹\基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一).files\c(1).gif" width=1
border=0></NOSCRIPT> </A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -