MiniGUI及其移植与应用
基于ARM-Linux的MiniGUI的仿真与移植.

基于ARM-Linux的MiniGUI的仿真与移植摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。
仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。
关键词:Butte近几年,随着嵌入式系统的日益发展和32位嵌入式处理器以及图形显示设备的广泛应用,目标产品对GUI(图形用户界面)的需求越来越多。
由于嵌入式系统一般实时性要求很高,所以嵌入式系统下的GUI需要具有轻量级型、占用资源少、高性能等特点。
此外,嵌入式系统往往是一种定制设备,它对GUI的需求各不相同,因此,GUI必须也可以定制。
而MiniGUI是一个非常适合实时嵌入式产品的高效、可靠、可定制、小巧灵活的图形用户界面支持系统,被广泛的应用于高端科技产品中。
利用MiniGUI开发出良好的人机交互界面已成为嵌入式开发中的迫切需求。
本文实现了在ARM-Linux环境下进行基于QVFB的MiniGUI的模拟开发、调试,通过在PC机上的仿真模拟,将应用程序完成之后,利用交叉编译工具编译产生在目标机上运行的代码,然后把MiniGUI和可执行应用程序移植到S3C2410目标板上,这样既节省了开发时间,又提高了开发效率和质量。
1 MiniGUI的特点和体系结构MiniGUI项目的最初目标是为基于Linux的实时嵌入式操作系统提供一个轻量级的图像用户界面支持系统。
作为操作系统和应用程序之间的中间件,MiniGUI将底层操作系统与硬件平台之间的差别隐藏起来,并对上层应用程序提供了一致的功能特性。
1.1MiniGUI的特点(1)占用资源少:MiniGUI本身占用的空间非常小,整个MiniGUI系统占用空间在2~4MB,在某些系统上,MiniGUI系统本身所占用的空间可进一步缩小到1MB以内。
MiniGUI3.0.12安装与移植

MiniGUI3.0.12及组件下载地址/downloads/index.html libmgplus-1.2.4下载地址/download/yong_f/40628071. 需要下载的组件libminigui-gpl-3_0_12.tar.gzmg-samples-3_0_12.tar.gzfreetype-1_3_1.tar.gzjpegsrc_v7.tar.gzlibpng-1_2_37.tar.gzminigui-res-be-3_0_12.tar.gzzlib-1_2_2.tar.gzqvfb2-2.0libmgplus-1.2.4(可以在csdn上下载到)(qvfb所需要的包)libqt3-mtlibqt3-mt-devalienqt-devel-3.3.8-4.fc7.i386.rpm2.安装各组件<1>libminigui-gpl-3_0_12.tar.gz(库)./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo makesudo make install<2>minigui-res-be-3_0_12.tar.gz(资源包)./configure --prefix=/usr/localsudo makesudo make install<3>freetype-1_3_1.tar.gz./configure --prefix=/usr/localsudo makesudo make install(在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的Print_Mem( memory_footprint.##field, string )改为: Print_Mem( memory_footprint.field, string )#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )<4>安装PNG库./configure --prefix=/usr/localsudo makesudo make install<5>安装JPEG库./configure --prefix=/usr/local --enable-sharedsudo makesudo make install<6>安装zlib库./configure --prefix=/usr/localsudo makesudo make install<7>libmgplus-1.2.4./configure --prefix=/usr/localsudo makesudo make install将/usr/local/lib加入到.bashrc中<8>安装qvfb2(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包) sudo apt-get install libqt3-mtsudo apt-get install libqt3-mt-devsudo apt-get install aliensudo alien qt-devel-3.3.8-4.fc7.i386.rpmdpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb(开始安qvfb)cd qvfb2-2.0./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3sudo makesudo make install(qvfb2与1不同,没有文件输入是不会显示出框图的)<9>修改MiniGUI.cfg[system]# GAL engine and default optionsgal_engine=pc_xvfb(修改此处)defaultmode=640x480-16bpp(修改此处)# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2[fbcon]defaultmode=1024x768-16bpp[qvfb]defaultmode=640x480-16bppwindow_caption=QVFB-for-MiniGUI-3.0exec_file=/usr/local/bin/qvfbdisplay=0#{{ifdef _MGGAL_PCXVFB[pc_xvfb]defaultmode=640x480-16bppwindow_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)exec_file=/usr/local/bin/qvfb2(修改此处)display=0#}}<10>mg-samples-3.0.12 并运行./configure --prefix=/usr/localsudo makesudo make install./same/same问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对解决办法:将/usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向libjpeg.so.7.0.0 然后修改/usr/include/jpeglib.h 中的版本号为70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)(关于miniGUI在2440上的移植会在下篇更新)以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自/forum/showtopic-3899.aspx采用交叉编译方式【软件环境】PC:ubuntu 10.04开发板:Linux 2.6.32.2@2440Target: arm-none-linux-gnueabigcc version 4.4.3编译minigui3.0并移植需要的文件有(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本):FreeType库:minigui字体引擎freetype-1_3_1.tar.gzJPEG库:minigui显示jpeg图片jpegsrc.v8c.tar.gzpng库:minigui显示png图片libpng-1.0.59.tar.gzzlib库:minigui数据压缩函数库zlib-1.2.6.tar.gzminigui所用到的资源minigui-res-be-3_0_12.tar.gzminigui核心库libminigui-gpl-3_0_12.tar.gzminigui样例mg-samples-3_0_12.tar.gzStep1:建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压tar xzf freetype-1_3_1.tar.gztar xzf jpegsrc.v8c.tar.gztar xzf libpng-1.0.59.tar.gztar xzf zlib-1.2.6.tar.gztar xzf minigui-res-be-3_0_12.tar.gztar xzf libminigui-gpl-3_0_12.tar.gztar xzf mg-samples-3_0_12.tar.gzStep2:[编译Freetype库]cd freetype-1.3.1/(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui修改Makefile第12行all: ttlib ttest ttpo为all: ttlib ttpo第34行注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误ftdump.c:172:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:182:1: error: pasting "." and "first_instance" does not give a valid preprocessing tokenftdump.c:191:1: error: pasting "." and "second_instance" does not give a valid preprocessing tokenftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing tokenftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:203:1: error: pasting "." and "second_instance" does not give a valid preprocessing token(B)make(C)make install[编译JPEG库]cd jpeg-8c/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar如(后面的库的编译修改configure亦如此):## M4sh Initialization. #### -------------------- ### Be more Bourne compatibleCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arDUALCASE=1; export DUALCASE # for MKS shif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux --enable-shared(C)make(D)make install[编译PNG库]cd libpng-1.0.59/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make(D)make install[编译zlib库]cd zlib-1.2.6/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --shared(C)make(D)make install[编译资源库]cd minigui-res-be-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui(C)make(D)make install[编译核心库]cd libminigui-gpl-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)(B)./configure --prefix=/usr/local/minigui --host=arm-linux \--target=arm-linux --build=i386-linux --with-osname=linux \--with-style=classic --with-targetname=fbcon --enable-autoial \--enable-rbf16 --disable-vbfsupport --enable-tslibial(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到)(C)make(D)make install[编译示例库]cd mg-samples-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?查看根目录下的Makefile(vi Makefile),(line 204)会发现:COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \lf_skin font_text look_feel dbuff notebook same graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
1_MiniGUI移植实验

广州致远电子有限公司
MagicARM2410教学实验开发平台
4.实验预习要求
必须先做<< 实验指导>> 必须先做 <<… 实验指导>> 第 5 、6 章的实验 ,在 RedHat <<… >>第 章的实验, 操作系统上建立交叉编译环境, Linux 9.0操作系统上建立交叉编译环境,掌握交叉编译 和下载Linux应用程序到MagicARM2410上并运行 Linux应用程序到MagicARM2410上并运行; 和下载Linux应用程序到MagicARM2410上并运行; <<… 仔 细 阅 读 <<… 实 验 指 导 >> 第 1 章 的 内 容 , 了 解 MagicARM2410 实验箱的硬件结构, 2410实验箱的硬件结构 MagicARM2410 实验箱的硬件结构 , 注意彩色液晶屏驱动 电路; 电路; 阅读MiniGUI的文档<<MiniGUI用户手册>> MiniGUI的文档<<MiniGUI用户手册>>、 阅读MiniGUI的文档<<MiniGUI用户手册>>、<<MiniGUI 编程指南>> 了解MiniGUI的基本特点和应用配置选项, >>, MiniGUI的基本特点和应用配置选项 编程指南>>,了解MiniGUI的基本特点和应用配置选项, 以及应用程序的编写。 以及应用程序的编写。
广州致远电子有限公司
MagicARM2410教学实验开发平台
2.实验设备
硬件: 硬件: PC机 PC机 1台 MagicARM2410教学实验开发平台 MagicARM2410教学实验开发平台 1台 USB鼠标 USB鼠标 1个 USB键盘 USB键盘 1个 软件: 软件: 9.0操作系统 安装有Autoconf 操作系统( Autoconf和 RedHat Linux 9.0操作系统(安装有Autoconf和 Automake工具 工具) Automake工具) 嵌入式Linux Linux开发环境 嵌入式Linux开发环境 MiniGUILinux)软件 MiniGUI-STR(for Linux)软件
MiniGUI1.6的安装与移植

国脉信息学院 Guomai Information College《 MiniGUI1.6的安装与移植》课程设计报告2008 级电子信息与通信工程系电子信息工程专业电子0801 班学号0830010144 姓名江彪2010 —— 2011 学年第二学期2011年5月15日一、《嵌入式系统》课程设计任务书---------(2011年05月)时间:2011.5.10----5.25地点:嵌入式实验室班级:电子0801指导教师:张平均1、设计课题:MiniGUI1.6的安装与移植2、设计目的:①.进一步巩固嵌入式系统的基本知识;②.了解MiniGUI的基本结构;③.练习MiniGUI的系统配置和编译安装;④.学习MiniGUI的交叉编译;⑤.掌握MiniGUI界面编程;⑥.学会查阅有关专业资料及设计手册。
3、设计任务及要求:①.掌握嵌入式系统开发环境建立和使用;②.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;③.MiniGUI在PC上的安装、移植④.Linux基本输入输出驱动程序设计编译与移植⑤.基于MiniGUI的基本输入输出应用编程编译与移植⑥.编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;4、设计参考书《MiniGUI编程手册》、《嵌入式教学实验指导书》《ARM嵌入式Linux应用开发入门》汪明虎欧文盛编《嵌入式Linux设备驱动开发详解》华清远见培训中心二、前期资源准备:1、准备源码包:① ubuntu.9.04安装包。
②交叉编译器源码包arm-linux-gcc-3.4.1.Tgz③已经能够在开发板上运行的文件系统包。
Qte_yaffs.gz.④ minigui安装包,主要包括libminigui-1.6.10.tar,minigui-res-1.6.10.tar,samples-1.6.10.tar,qvfb-1.1.tar等资源文件以及相应的库文件:libminigui-1.6.10.tar.Gzmg-samples-1.6.10.tar.Gzminigui-res-1.6.10.tar.Gzsamples-1.6.10.tar.Gzmde-1.6.10.tar.gzlibpng_src.gzjpegsrc.v6b.tar.gzqvfb-1.1.tar.gzlibcorss.shrescorss.Shsimplecorss.Shmdecorss.shlibreduce.Sh2、目录安排:①新建/tmp/linux目录,把所有的源码包都放在此目录下②新建工作目录/opt/FriendlyARM/mini2440存放内核源码③新建/work/minigui目录,存放minigui④新建/minigui-free/nfsroot目录,存放交叉编译的minigui3、PC环境及软件①windows xp 系统②vmware-6.5虚拟机+Ubuntu-9.0.4三、minigui在PC环境下的安装以及开发板上的移植1、MiniGUI在PC上的安装①安装miniGUI的资源文件,minigui-res-1.6.10.tar.gz,miniGUI所使用的资源,包括基本字体、图标、位图和鼠标、光标。
第02章 MiniGUI的安装和使用

计算机应用技术系
第2章 MiniGUI的安装和使用
2.1 MiniGUI的组成
2.2 建立MiniGUI的PC运行环境
2.3 第一个MiniGUI程序 2.4 MiniGUI编程基础
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
第2章 MiniGUI的安装和使用
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.1 MiniGUI的组成
资源包
minigui-res-str-1.6.tar.gz。 这是针对MiniGUI-STR 的基本资 源包,其中包含了运行MiniGUISTR 1.6.2 需要的基本字体 (ISO8859-1) 、鼠标光标、图 标和位图等文件,还包括16 点阵 中文简体(GB2312)一款。
1.嵌入式目标系统不具备开发能力
2.Linux嵌入式系统与PC具有相似性
练习MiniGUI程序的编写和调试,熟 悉MiniGUI的配置、编译操作、应用 程序结构和API函数,为在目标产品 上应用MiniGUI打下基础。
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.2 建立MiniGUI的PC运行环境
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.3.2 图形引擎和输入引擎
MiniGUI抽象层的优越性:
图形和输入抽象层的设计,为实现 MiniGUI 跨操作系统、跨硬件平台提供了 非常大的便利。
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.3.2 图形引擎和输入引擎
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
6.6 MiniGUI

新建目录 /usr/local/arm/2.95.3/armlinux/include/freetype1/freetype
E. 安装TrueType字体库(续)
mkdir -p /usr/local/arm/2.95.3/armlinux/include/freetype1/freetype cp *.h /usr/local/arm/2.95.3/arm-linux/include/freetype1/freetype
cd /opt/s3c2410 tar zxf /opt/linux/mg-samples-1.3.0.tar.gz cd mg-samples-1.30 ./configure make ls src
检查是否src目录下有例子程序
F. 修改MiniGUI配置文件
编辑
/usr/local/etc/MiniGUI.cfg文件
包含了MiniGUI的综合演示程序
ms-samples-1.3.0.tar.gz:
包含了MiniGUI的配套实例程序包
3. MiniGUI模拟环境构建
启动Red Hat Linux 9,用root登 陆 建立自己的开发目录
cd /opt
mkdir s3c2410 cd s3c2410
执行make install需要在armlinux下新建两个目录(见下页)
D. 安装jpeg图形库(续)
mkdir -p /usr/local/arm/2.95.3/arm-linux/man/man1
make install
jpeg图形库安装完毕
E. 安装TrueType字体库
mkdir -p /opt/s3c2410/libttf/extend
基于ARM和Linux的MiniGUI及其应用程序的移植

摘 要 : 年 来 , 着计 算机 技 术 、 讯 技 术 的迅 速 发 展 , 别是 互联 网 的 迅 速 普 及 和 3 计 算机 、 信 、 费 电 子 ) 一 的咖 速 , 型 近 随 通 特 C( 通 消 合 微
化 和 专业 化 成 为 发展 的新 趋 势 , 入 式 系统 开 发 已经 成 为 了信 息产 业 的 热 点 。基 于 ARM 硬 件 平 台及 Ln x操 作 系统 的嵌 入 式产 品 嵌 iu
l SN 1 0 — 0 4 S 09 34
E ma : f @cc . t n — i k j cc e. t: / dn sne. c Te : 6—5 —5 09 3 5 90 4 l+8 51 69 6 6 96
C mp t K o  ̄ g n e h o g o ue n we ea d T c n l y电脑 知 识 与技术 r d o
n n dsn rtm ce r ino e t n c i ac l a o f C ( mp tr o a y es et 3 co ue mmu i t n& C nu l t c mi o t n a dse i i t nb c mete i C nc i ao o s me e r ) c ma o c l a o e o n E c i, r i n p az i h ma
i hema n fcorw hih a e t t o e sofe be de st i a t c f cs hepr c s m d d~s t m sde l pm e t yse veo n .Thsis e st oc s h e a to i GU Io i sue tH hepr e soft e rpln ft M m he n t nu ltor , oc e r m cua o ii n,tpo ta sho o r p a ot de,kene, eyse h r i lo a lyssa d heLi x p af m pr e d fo a t lc nd to i rry w t e lntBo Loa r r l  ̄ s t m on t eboad,tas na e n d srbe a t od s fn ly tr pa st e s e aeM i i ec i sp rsoft c e , al ,i e lnt h ofw r n GU Ia d hep og a v l d tt heAR M ltor . he i n t r rm de eope on i o t p af m
MiniGUI在S3C2440上的移植及软件开发

Vo1 27 N O . . 6
萍 乡高 等专科学 校学报
J u n l fP n xa g C l g o r a ig in o l e o e
21 0 0年 1 月 2
De .2 0 Байду номын сангаас 01
M i GU I在 ¥3 44 上 的 移 植 及 软 件 开 发 ni C2 0
吴 新 华
( 乡高等专 科 学校 计算机 系 , 西 萍 乡 3 7 0 ) 萍 江 3 0 0
摘
要 : iiUI 目前 比较 成 熟 的嵌 入 式 Ln x系 统 的 图 形 用 户 界 面 , 具 有 小 巧 、 配 置 和可 移 植 等 特 点 。本 文 M nG 是 iu 它 可
分 析 了 Mii n GUI 的结 构 和 特点 , 细介 绍 了基 于 AR 和 L n x的 Mii I 移 植 与 实 现 的 过程 。 详 M iu nGU 的
关 键词 : 入 式 系 统 ; 形 用户 界 面 ; nG ; 植 嵌 图 Mii UI移
中 图分 类 号 : P 1 T 36 文献 标 识 码 : A 文 章 编号 :O 7 1 9 2 1 ) 6 0 6 一O 1 O —9 4 ( 0 0 0 — O 8 4
1 引 言
程 中建 立 多 个 窗 口, 所 有 的窗 口在 一个 进 程 中 运 但 行 。相 反 , 运行 在 Mii nGUI i —L t 的每个 程序是 单 e上 独 的进 程 , 每个 进程 也可 以建立 多个 窗 口。Mii UI nG
3 1Mii . nGUI 程序开 发
Mii nGUI 提供 了三种 窗 口类 型 : 主窗 口、 对话框
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MiniGUI及其移植与应用权宁一(东北电力大学信息工程学院吉林吉林132012)【摘要】:本文介绍了MiniGUI系统在嵌入式开发中的移植与应用。
对MiniGUI图形软件的特点、体系结构、工作模式做了叙述,描述了MiniGUI在uc_osⅡ环境中的移植方法,MiniGUI应用软件的开发思想和流程,并对其应用领域做了介绍。
【关键词】:MiniGUI,移植,控件,消息循环1、MiniGUI概述随着嵌入式系统在工业控制、信息家电、智能手持终端、办公自动化等领域中的广泛应用,人们对产品的图形用户接口(GUI)的需求越来越强烈。
图形美观、界面友好的GUI已广泛应用在3G手机、PDA、智能传感器、工控终端等嵌入式设备上,其中比较成熟的GUI产品有:MiniGUI、MicroWindows、OpenGUI、TinyXWindow、QT/Embedded。
MiniGUI最初是清华大学为数控机床研发计算机控制系统时根据需要独立开发的图形用户接口,它具有代码小巧、实时性好、高效稳定、易于裁减的特点,非常适合应用于嵌入式实时控制系统。
MiniGUI可以运行在任何一种具有线程支持的POSIX兼容系统上,同时也是国内出现的最早的遵循LGPL条约的自由软件之一。
MiniGUI有三种运行模式:⑴MiniGUI-Threads:运行在MiniGUI-Threads的程序可在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行,可以配合的操作系统有ucosii、vxworks、linux。
⑵MiniGUI-lite:每个程序是单独的进程,每个进程可建立多个窗口,只有具备完整unix特性的操作系统才可运行这一模式。
⑶MiniGUI-standalone,可以以独立进程方式运行而不需要其它任何支持,这种方式几乎可以支持所有操作系统。
MiniGUI具有以下特点:⑴小巧可订制,包含全部功能的库文件只有300k。
⑵高稳定性,可移植性好。
⑶界面皮肤支持,用户可通过皮肤支持获得华丽外观界面。
⑷提供了完备的多窗口机制及消息传递机制。
⑸丰富的控件资源,包括菜单、进度条、列表框、按钮、工具栏等。
(6)多种键盘布局支持,多字符集及多字体支持,常见的图像文件支持。
⑺多种汉字输入法支持,windows资源文件支持。
2、MiniGUI的结构特点与移植方式2.1MiniGUI的体系结构图1MiniGUI结构体系MiniGUI采用了分层结构设计思想,共分为GAL、IAL、Pthread层,MiniGUI核心层,用户接口层三层结构。
GAL为图形抽象层,提供了底层操作系统的图形接口,配置MiniGUI选用GAL引擎,就可使用framebuffer作为MiniGUI图形发生引擎;IAL为输入抽象层,它提供了输入设备如键盘鼠标等的驱动,可将输入设备的输入事件最终映射为GUI系统API层的消息事件。
有了GAL、IAL可以把底层硬件及操作系统进行完全屏蔽,方便MiniGUI的移植。
同时,用户可在XWindow系统中调试运行自己的产品,通过重新编译就可使软件运行在特定的硬件平台上。
Pthread(POSIXthread)是提供内核级线程支持的c库函数。
MiniGUI核心层为中间层,包含了窗口系统所需要的各个功能模块,详见图1。
用户接口层API对于不同的平台是一致统一的,底层系统已被完全屏蔽,用户不必考虑输入设备及绘图细节,只需使用标准C语言进行类似win32库函数调用即可。
2.2MiniGUI工作模式MiniGUI采用微客户/服务器机制,通过消息队列和多线程之间的同步机制来实现。
在多线程环境中各线程之间有信息交互的需要,依据"先来先服务"的原则,依次处理每个线程的请求。
一个线程首先在desktop微服务器的消息队列中放置一条消息,要求建立窗口,然后进入等待状态。
当desktop处于空闲状态时可以立即处理这一请求。
最后,desktop返回处理结果,唤醒等待的线程。
MiniGUI启动3个重要的微服务器,它们分别为desktop、parser、timer。
其中desktop用于管理MiniGUI窗口中的所有主窗口;parser线程用于采集键盘鼠标事件并转换成API层消息;timer线程用来触发定时器事件。
2.3MiniGUI的移植嵌入式系统的结构框架从底层到上层依次为:硬件平台、嵌入式操作系统、MiniGUI、用户程序,其中uclinux与uc/OS-II为常用的操作系统,下面以uc/OS-II为例介绍MiniGUI的移植。
uc/OS-II具有实时性强、代码简单的特点,在教学及工业实时控制领域得到了广泛应用。
MiniGUIforuc/OS-II的配置及编译可在windows环境中的ADS开发平台中进行,编译完成之后生成一个静态库MiniGUI_lib,最终生成包括uc/OS-II、MiniGUI、应用程序在内的可执行映像文件,将映像文件固化写入硬件平台即完成MiniGUI的移植。
在编译之前需要进行以下工作:设置MiniGUI配置头文件、确定头文件路径、选定编译规则。
MiniGUI配置头文件中参数_AUTO_IAL是模拟键盘鼠标选项;_COM-MM_IAL是uc/OS-II通用输入引擎;_GB_SUPPORT是字符集支持;_USE_OWN_MALLOC为内存管理函数支持;_USE_OWN_STDIO为函数支持。
编译规则设置中_MiniGU-I_LIB_声明编译MiniGUI_LIB库;_uc/OS-II_声明目标操作系统;-EC允许隐性类型转换;_NOLINUX_表示非linux系统。
3、基于MiniGUI的软件设计开发思想3.1MiniGUI开发流程uc/OS-II初始化后创建任务main_task,在该任务中创建POSIX协议线程main_thread,main_thread中调用函数mg_main_task,进入MiniGUI入口MiniGUI_entry,进而调用应用程序入口函数MiniGUIMain,执行用户软件及窗口过程函数。
MiniGUI应用程序必须包括的头文件有:common.h--定义了宏及数据类型;minigui.h--定义了接口函数及杂项函数;window.h--定义了窗口的宏及数据类型;control.h--定义了系统内部控件。
MiniGUIMain()是程序的入口点函数,一般用户程序先创建一个主窗口或非模式对话框,在主窗口内建立若干控件,然后建立消息队列,进入窗口消息循环,响应各类消息。
通过调用Cre-ateMainWindow()函数创建主窗口,函数返回窗口句柄。
函数调用时需给MAINWINCREATE结构体指针赋值,确定主窗口的各项属性值。
调用ShowWindow()函数将主窗口进行显(下转第71页)(上接第65页)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!示,然后进入系统消息循环。
GetMessage()函数从应用程序的消息队列中取出一个消息,同时得到该消息发往窗口的句柄、参数值;TranslateMessage()函数将键盘消息转换成字符消息,便于程序处理;DispatchMessage()函数将消息传送至指定句柄的窗口,调用窗口过程函数进行消息响应。
窗口建立后即产生MSG_CREATE消息,在对应的消息响应函数中用createwindow建立控件及子窗口;MSG_PAINT则是在移动窗口或重绘窗口时发生;不予处理的消息由De-fauhMainWinProc函数进行缺省处理;关闭窗口时产生MSG_CLOSE消息,用Destroy-MainWindow()函数销毁主窗口,并产生一个MSG_QUIT消息,退出消息循环,最后调用Main-WindowThreadCleanup()清除所用资源。
在消息优先级设置上,鼠标或键盘的输入消息优于PAINT、定时器等消息。
MiniGUI的消息处理函数除了GetMessage()、TranslateMessage()、DispatchMessage()外,还有PostMessage()、SendMessage()、SendNotifyMessage()、PostQuitMessage()等。
3.2MiniGUI的图形设备接口及常用控件MiniGUI的图形设备接口GDI提供了丰富的绘图库函数,包括画点与画线、文字输出、封闭曲线与区域填充等,通过Be-ginPaint与EndPaint获取和释放设备上下文。
同时MiniGUI定义了剪切域,并可通过GDI模块的映射模式操作函数将逻辑坐标系转换成设备坐标系。
MiniGUI内建的控件库非常丰富,常用的包括静态框、按钮、列表框、进度条、滑块、编辑框、工具条、菜单等,用户可自由选取。
4、MiniGUI的应用由于MiniGUI实时性好、结构小巧,在uc/OS-II平台下广泛应用于实时控制系统中,同时MiniGUI-lite模式可用于高端模式--PDA、OA产品,随着网页浏览器等插件的引入,MiniGUI的功能将日趋丰富,应用将更加广泛。
参考文献:1.刘峥嵘.嵌入式Linux应用开发详解.北京:机械工业出版社,20042.郝献鹏.MiniGUI-面向嵌入式系统的GUI系统.河南:信息工程大学学报,20013.敬梅.嵌入式环境下MiniGUI的移植.上海:现代计算机,20064.北京博创科技有限公司.MiniGUI在ucOSⅡ上的移植技术文档.北京:20055.田正妙.基于Linux系统的MiniGUI的移植与应用.北京电子科技学院学报.北京:2006图2MiniGUI应用程序流程图像文本是一类特殊的文本形式。
这类文本的基本形式属于图像,它是把字符构成的信息内容以图像格式来存储。
图像文本相比其它两种文本形式,其提供冗余的方式、提供的冗余量大小、嵌入信息的方法等方面有所不同,这些与图像信息隐藏技术的相应方面更为接近。
2、冗余构造从上述分析可以看到,设计嵌入方案第一步骤是获取载体的"极相似性"差别。
信息隐藏首先会对待嵌入信息进行预处理,所以方案主要考虑怎样把预处理得到的信息bit流嵌入载体而又不会被发现。
目前而言,达成这一指标全归因于"极相似性差别"--"极相似性"保证"差别"不易被感知;"差别"保证bit流可以被嵌入。
基于这样的分析,本文提出了"冗余构造"概念:基本概念:冗余构造是指开发作为载体的数字信息的冗余,试验以确认冗余选择的有效性。
概括的说,冗余可定义为媒介中不因微小改变而使其宏观特性发生可感知变化的bit信息。
冗余构造目的就是快速发现这一信息,并加以验证和利用。
根据上述的概念,本文第二节中所描述的"冗余构造"有:1)中英文标点的输入宽度;2)为嵌入而插入的空白字符;3)同义词;4)同音近义词;5)HTML,XML的标记不区分大小写;6)RTF中以隐藏为目的的控制字;7)相近字体;8)微调大小;9)微调颜色;10)微调单词间隙等等。