基于ARMLINUX的嵌入式GUI的设计与开发._基于arm的简易gui设计
基于ARMLINUX的嵌入式GUI的设计与开发.由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于arm的简易gui设计”。
基于ARM LINUX的嵌入式GUI的设计与开发
摘 要:GUI设计在嵌入式系统设计中占据着举足轻重的地位,MiniGUI为一种适合于嵌入式系统的、功能强大的GUI,本文介绍了基于ARM和Linux的MiniGUI移植方法以及在ARM开发板上实现普通手机操作界面的设计过程,并提出了相应功能的实现方法,给出了设计的效果。
关键词:嵌入式系统;ARM;Linux;MiniGUI
1、引言
目前,嵌入式应用非常广泛。嵌入式系统由硬件和软件两大部分组成。硬件方面的主要核心是嵌入式处理器,以ARM为核的32位RISC处理器是中高端嵌入式应用的代表。软件方面一般由嵌入式操作系统和应用软件组成。嵌入式操作系统种类众多,比如Linux、uCLinux,其具有开放源码、免费授权和资源丰富等优点,备受开发者的青睐。应用软件根据产品需求会用到图形界面(GUI)、文件系统(FS)、网络(TCP/IP协议栈)等软件功能,其中,GUI对于提高人机交互友好性,易操作性具有很好的效果,而随着图形显示设备的广泛应用,目标产品对GUI的需求越来越多。
2、系统环境和构架
系统实现环境采用SmartARM2200开发板及运行在ARM上的uCLinux操作系统。
SmartARM2200开发板:CPU型号为LPC2210,内核规格为ARM7TDMI-S,60M,支持uCLinux操作系统[1] [2];上面带有充足的存储资源(PSRAM,NAND FLASH,NOR FLASH和E2EPRORM等)和丰富的接口(以太网接口、CF卡和SD卡接口,串口接口等),可使用2.2英寸240*320 TFT液晶屏,可使用JTAG仿真调试[3];
嵌入式Linux内核[4]:uCLinux嵌入式操作系统;
uCLinux开发平台的构建:
基于Linux嵌入式系统的设计,其开发流程为如图1所示:
图1 Linux嵌入式系统开发流程
图中,依次建立开发环境arm-elf-gcc,安装uCLinux内核,下载ZLG/BOOT,下载uCLinux内核和文件系统,为了调试uCLinux应用程序,将宿主机的共享目录加到开发板的/mnt目录下,并启动NFS服务。MagicARM2200-S主芯片为LPC2210,LPC2210芯片没有内部Flash,无法进行ISP下载,需要额外的DownLoad程序。
3、MiniGUI移植
在宿主机上安装MiniGUI:将MiniGUI函数库源代码和资源文件(MiniGUI-STR压缩包)复制到PC机的RedHat 9.0特定目录上,解压,编译。
在目标板的uCLinux操作系统上运行MiniGUI应用程序[3],需要:
1)由于不同目标机的图形显示设备与输入设备不一致,所以需要为MiniGUI编写相应的GAL和IAL(驱动程序),再于MiniGUI的源代码一起交叉编译生成MiniGUI的静态链接库文件(uCLinux不支持共享库,只能使用静态连接库); 2)MiniGUI应用程序也在宿主机上进行交叉编译,并与MiniGUI静态链接库生成目标板可执行的FLAT格式文件,交叉编译如图2所示; 图2 MiniGUI应用程序的交叉编译
3)在目标板的uCLinux操作系统上搭建MiniGUI运行环境(安装MiniGUI的资源文件res和运行的配置文件MiniGUI.cfg),将MiniGUI应用程序(FLAT格式)下载和运行。
根据系统要求,需安装MiniGUI资源文件,并修改运行时的配置文件MiniGUI.cfg。
4、系统设计与实现 4.1系统总体框架
基于SmartARM2200开发板,进行MiniGUI系统,并模拟手机显示部分主要功能:首页,图标选择界面,电话本,信息,游戏,其他等六大模块,系统总体框架如图3.1所示:
1)首页:具有显示静态封面图片,更改、显示时间等功能;
2)图形选择界面:提供一个以图标加标签文字的方式供用户浏览选择条目的界面;
3)电话本管理:提供记录姓名、手机、电话、地址等信息,并且可以添加、修改、设计适合手机键盘输入的拼音输入法程序,满足中文姓名,中文短信等汉字输入的需要,键盘布局如图3.2所示;
4)信息管理:提供编写新信息,浏览收信箱和发信箱等的操作界面; 5)游戏:提供一到两个单机游戏,比如贪吃蛇,俄罗斯方块; 6)其他:利用GUI绘图函数绘制几幅优美的图像,制作闹钟等;
图3.1系统整体框图图
图3.2键盘布局图
注:在主界面下,可以通过按左右键来进入图形选择界面,电话本管理和短信管理;在图形选择界面下可以通过选择不同的图标来进入不同的操作界面。
4.2 系统模块设计
4.2.1主界面功能的实现如下:
1)主窗口的创建部分[5]
InitMainWindow();
// 设置各项属性,并建立主窗口
ShowWindow(hMainWnd,SW_SHOWNORMAL);
// 显示主窗口
2)消息循环
while(GetMeage(&Msg,hMainWnd))
{ TranslateMeage(&Msg); DispatchMeage(&Msg);}
3)填充背景色和显示汉字
LoadBitmapFromFile(HDC_SCREEN,&mainskin,“res/skin2.bmp”);
FillBoxWithBitmap(hdc,0,0,MWINDOW_RX,283,&mainskin);
TextOut(hdc,30,295,“信息”); // 显示文字
其中资源图片一般在MiniGUI建立主窗口的过程中发送MSG_CREATE消息时加载(逻辑字体也在此时创建),而背景色的填充和汉字的显示则是在窗口初始显示,发送MSG_PAINT消息时绘制,而且必须在指定的设备上下文中操作:
hdc = BeginPaint(hWnd);
// 获得设备hdc
EndPaint(hWnd,hdc);
// 释放设备hdc
4)时间操作
在MSG_CREATE消息时,启动1s的定时器:SetTimer(hWnd,ID_TIME,100);在定时器消息MSG_TIMER中获取当前时间,并显示出来。
4.2.2图形选择界面的功能实现
当有键盘按下时,系统会发送MSG_KEYDOWN,处理此消息时,通过判断按键方向,确定当前选择的图标,当选择图标发生变化时,即用背景色重绘原有边框,用另一种颜色绘制新的边框,并将标签文字重写在右下角的位置。
4.2.3电话本管理模块完成的功能:
1)显示电话本名单,通过上下键移动可选中不同的名单,同时显示其电话号码;
2)选中一个名单时,可以查看其详细信息(姓名,手机,固话,住址,排序,类型等),并且可以编辑修改;
3)当选中“新建”时,可以创建一个新的电话名单和其详细信息;
4)姓名和住址的编辑支持中文拼音输入法,通过2~9按键上标注的26个字母组合,可以输入常见的汉字。
电话本管理模块的实现方法如下:
1)电话本列表框实现:
{CTRL_LISTBOX,//列表框控件定义:
WS_VISIBLE WS_VSCROLL WS_BORDER LBS_NOTIFY,//LBS_SORT,//
L
BS_AUTOCHECKBOX,1,0,238,263,ID_PhoneList,”“,0,}
在初始化和更新条目时需要填充列表框,清空列表框和填充函数分别为:
SendDlgItemMeage(hWnd,ID,LB_RESETCONTENT,0,0);
SendDlgItemMeage(hWnd,ID,LB_ADDSTRING,0,(LPARAM)myphonenote[i].name);
更改选择条目字符串和更改反白条位置的函数分别为:
SendDlgItemMeage(hwnd, ID, LB_SETTEXT,index,buff),SendDlgItemMeage(hwnd,ID,LB_SETCURSEL,index,0L);
2)条目明细——查看框
分别创建相应的静态框和编辑框,列表框,并填充相应的值即可。
3)条目明细——编辑框
初始化时把光标赋予姓名框,备份当前的条目信息。
SendMeage(hwnd,EM_LIMITTEXT,10,0L);
4)拼音输入框
拼音输入法实现了手机电话本的修改维护和信息的编写,它不仅窗口比较多,切换频繁,而且需要汉字字库和键盘编码译码的支持,显示界面实现的难度比较大,其实现框架图如图4所示:
图4 拼音输入法界面
5、系统实现
经过交叉编译,通过FTP或NFS,和MiniGUI的资源文件、配置文件一起下载到构架好uCLinux操作平台的ARM板,重启运行,程序在开发板上运行时部分界面效果比较理想,如图5所示:
图5 运行结果
参考文献:
[1]李岩,荣盘祥编著.基于S3C44B0X嵌入式uCLinux系统原理及应用.清华大学出版社.[2] 广州周立功单片机发展有限公司.uCLinux开发平台构建.[3]周立功等著.ARM嵌入式系统实验教程(二).北京航空航天大学出版社.[4]林晓飞,刘彬等编著.基于ARM嵌入式Linux应用开发与实例教程.清华大学出版社.[5]北京飞漫软件技术有限公司.MiniGUI编程指南.