1.实验目的
本实验在ARM开发母板(IOT-ARMMB)上使用键盘、TFT液晶屏实现了一个基于MiniGUI的简单编辑器程序。该实验首先在µClinux下实现了MiniGUI的移植,简易编辑器程序利用MiniGUI创建主窗口,在窗口过程函数中处理字符消息,实现一个简易编辑器的功能。通过该演示例子,使读者对开发母板的键盘和TFT液晶屏有更进一步的了解,并掌握在µClinux下移植MiniGUI和交叉编译MiniGUI应用程序的操作方法。
2.实验设备
(1)硬件
● ARM实验母板(IOT-ARMMB)1套。
● 传感器及外围模块(IOT-MODULES)1套。
● PC(含串口)1台。
(2)软件
● Linux操作系统。
● µClinux2.4x发行包和arm-elf-gcc交叉编译环境。
3.实验原理
本实验的演示程序除使用了开发板上的基本部件之外,为了进一步丰富演示效果,还使用了TFT液晶屏,实物照片如图3-15所示。
图3-15 TFT液晶屏
MiniGUI是一款面向实时嵌入式系统的图形用户界面支持系统,其为应用程序提供了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个主窗口,然后在这些主窗口中创建按键和编辑框等控件。MiniGUI还为用户提供了丰富的图形功能,以显示各种格式的位图,还可以在窗口中绘制复杂图形。MiniGUI与操作系统的关系如图3-16所示。
图3-16 MiniGUI与操作系统的关系
像µClinux、µC/OS-II、eCos等操作系统,通常运行在没有MMU(内存管理单元,用于提供虚拟内存支持)的CPU上;这时,往往就没有进程的概念,而只有线程或者任务的概念,这样MiniGUI的运行环境也就大相径庭。因此,为了适合不同的操作系统环境,可将MiniGUI配置成3种不同的运行模式:MiniGUI-Threads、MiniGUI-Processes、MiniGUI-Standalone。
MiniGUI-Threads为多线程的应用模式,运行在MiniGUI-Threads上的程序可以在不同线程中建立多个窗口,但所有窗口在同一个进程或者地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式操作系统,如µC/OS-II、eCos等。当然,在Linux和µClinux上,MiniGUI也能以MiniGUI-Threads的模式运行。
MiniGUI-Processes为多进程的应用模式,MiniGUI-Processes上的每个程序是单独的进程,每个进程也可以建立多个窗口,并且实现了多进程窗口系统。MiniGUI-Processes适合于具有完整UNIX特性的嵌入式操作系统,比如嵌入式Linux。
MiniGUI-Standalone为独立进程的应用模式,这种运行模式下,MiniGUI可以以独立任务的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用µClinux的嵌入式产品中,因为各种原因而缺少线程支持,这时,就可以使用MiniGUI-Standalone来开发应用软件。MiniGUI-Standalone模式的适应面最广,支持几乎所有的操作系统,甚至包括DOS。但不论采用哪种运行模式,MiniGUI为上层应用软件提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。
要在开发板上的µClinux操作系统上运行MiniGUI应用程序,首先要在宿主机(即PC)上对MiniGUI的源代码进行编译(交叉编译),生成MiniGUI静态链接库文件(µClinux不支持共享库,故MiniGUI要使用静态链接库)。然后MiniGUI应用程序也在宿主机上进行交叉编译,并与MiniGUI静态链接生成目标板可运行的FLAT格式文件,交叉编译示意图如图3-17所示。最后,在目标板的µClinux操作系统上搭建MiniGUI运行环境,即安装MiniGUI的资源文件和运行时的配置文件,再将MiniGUI应用程序(FLAT格式文件)下载和运行。
图3-17 交叉编译示意图
由于不同目标机的图形显示设备与输入设备不一致,所以用户需要为MiniGUI编写相应的图形引擎和输入引擎(即驱动程序),再与MiniGUI的源代码一起交叉编译生成MiniGUI静态链接库文件。光盘提供的MiniGUI-STR压缩包已经加入了适用于IOT-ARMMB开发母板的图形引擎和输入引擎。IOT-ARMMB开发母板上的16个按键定义如图3-18所示。
图3-18 开发母板上的16个按键定义
在MiniGUI程序的入口点中,首先调用InitMainWindow()建立主窗口,然后调用ShowWindow()显示主窗口。紧接着进入消息循环,不停执行TranslateMessage()和DispatchMessage()函数来处理消息。相关代码如下:
键盘是基本的输入设备之一,MiniGUI程序通过处理窗口的键盘事件来接收按键输入,键盘事件有MSG_KEYDOWN(按键按下)、MSG_KEYUP(键释放)、MSG_SYSKEYDOWN(系统击键消息,即〈Alt〉键)和MSG_SYSKEYUP(系统击键消息)等。
一般窗口用户程序不直接处理键盘事件,而是处理MSG_CHAR和MSG_SYSCHAR事件,即字符消息。字符消息由消息循环代码中的TranslateMessage函数产生,TranslateMessage函数将键盘消息MSG_KEYDOWN和MSG_SYSKEYDOWN转换成字符消息,同时也将按键扫描码转换成相应的字符编码(字符消息中的wParam参数)。相关的代码如下:
4.实验内容
在ARM下的µClinux开发平台构建MiniGUI开发环境,初步掌握移植MiniGUIforµClinux的基本方法和应用配置的一般步骤。
初步掌握MiniGUI开发的一般步骤,能够基于提供的图形引擎和输入引擎设计实现简单的图形用户界面应用程序。
5.实验步骤
(1)在PC上安装MiniGUI并移植图形引擎和输入引擎
启动Linux系统,以root用户登录系统。在/home目录下新建一个名为minigui的文件夹,从光盘中将MiniGUI-STR中的libminigui-str-1.6.2.tar.gz、minigui-res-str-1.6.tar.gz和mg-samples-str-1.6.2.tar.gz文件复制到此文件夹中,并解压到当前文件夹中。
说明:由于交叉编译MiniGUI需要用到Autoconf和Automake工具,若在安装Linux操作系统时没有选择这两个工具,可以使用系统的添加/删除应用程序来安装。(www.xing528.com)
由于光盘提供的MiniGUI-STR压缩包已经完成了适用于IOT-ARMMB开发母板的图形引擎和输入引擎的移植,在这里略过,有兴趣的读者可以参阅MiniGUI图形引擎和输入引擎移植的相关资料。
(2)交叉编译MiniGUI
打开终端窗口,使用以下指令执行MiniGUI-STR的编译和库文件的安装。操作结束后,在/home/minigui_lib目录下会有MiniGUI的静态库文件,这样MiniGUI只需要指定链接/home/minigui_lib目录下的MiniGUI库文件,即可生成在IOT-ARMMB开发板上运行的MiniGUI程序文件(FLAT格式文件)。
(3)交叉编译MiniGUI应用程序
在mg-samples-str-1.6.2/src目录下建立源文件sedit.c,编写实验程序代码。在mg- samples-str-1.6.2中编写一个配置脚本build-uclinux-wlarmmb7,内容如下:
说明:可以从mg-samples-str-1.6.2目录下复制build-uclinux-arm3000文件,然后更改文件名为build-uclinux-wlarmmb7,修改文件内容。
修改mg-samples-str-1.6.2/src目录下的Makefile.am文件,设置编译sedit.c文件,代码如下:
打开终端窗口,执行以下指令编译MiniGUI应用程序。编译成功通过后,在mg-samples-str-1.6.2/src目录下会生成sedit文件(FLAT格式文件)。
继续执行以下指令安装资源文件。执行以下指令之后,在/usr/local/lib/minigui目录下会产生一个res目录,该目录下保存有MiniGUI的资源文件(如图片、图标和字体等)。
MiniGUI运行时需要使用MiniGUI.cfg(即MiniGUI运行时配置文件),主要用来配置使用的图形引擎、输入引擎和窗口字体等。修改/home/minigui_lib/etc下的MiniGUI.cfg文件,使用commlcd图形引擎和comm输入引擎,代码如下:
(4)在目标板的µClinux操作系统建立MiniGUI运行环境和执行MiniGUI应用程序
至此,MiniGUI的资源文件、运行时配置文件和应用程序(FLAT格式文件)都已经产生了,接着在目标板的µClinux操作系统建立MiniGUI运行环境。
连接好IOT-ARMMB开发母板的串口线、网线和电源线,并将TFT液晶模块安装到WLARMMB7开发母板上。启动开发板上的µClinux,设置和重启NFS服务(具体步骤详见实验二)。
将PC端/home/minigui_lib/etc/MiniGUI.cfg,/home/minigui/mg-samples-str-1.6.2/src/sedit这两个文件和/usr/local/lib/minigui/res文件夹复制到NFS的共享目录/home/armwork(此处在实验二中设置为/home/armwork)。将光盘中的rescp.sh文件复制到/home/armwork/res目录下。由于输入引擎需要用到I²C驱动,所以还要将光盘中的i2c文件复制到/home/armwork下。
在开发板的µClinux文件系统中建立与PC端相对应的目录及子目录,目录及子目录列表如下:
在PC端使用minicom软件操作开发板,挂载PC端的NFS(挂载方法详见实验二),并执行以下命令复制相关文件到开发板目录。
紧接着执行以下命令运行MiniGUI程序。
正确运行sedit程序之后,在开发板的TFT液晶屏上将会显示一个简易编辑窗口,使用开发板上的功能键〈0〉~〈9〉输入数字,使用功能键〈Back〉删除已经输入的字符,使用功能键〈Enter〉换行。程序运行结果如图3-19所示。
图3-19 程序运行结果
6.思考题
1)如何进行MiniGUI针对不同开发板图形引擎和输入引擎的移植?
2)在本实验中在开发板目录建立MiniGUI运行环境都需要哪些文件的支持?
3)如何利用消息处理实现一个MiniGUI应用程序,根据按键输入显示不同的图片?
7.补充阅读
[1]MiniGUI Technology White Paper.http://www.minigui.com/.
[2]Datasheet for MiniGUI V2.0.4/V1.6.10.http://www.minigui.org/.
[3]MiniGUI User Manual Version2.0.http://www.minigui.org/.
[4]MiniGUI Programming Guide Version2.0.http://www.minigui.org/.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。