基于minigui的嵌入式gui开发内容摘要:
版的 Linux系统中普遍采用的 GUI是XWindows系统,但显然它相对于嵌入式系统来说是过于庞大了,嵌入式系统要求西北大学学士学位论文 11 的是一个轻量级的性能可靠和可裁减的 GUI,因此需要重新开发适合嵌人式系统的 GUI。 目前国内外已经推出了很多基于 Linux的 GUI产品,现在比较流行的一些 GUI产品包括 MiniGUI、 MicmWindov,OpenGUI、 QT/ Embedded等,其中 QT/ Embedded属于商业化的产品,其他属于开源软件。 5 嵌入式界面开发框架 和 Minigui 版本描述 本嵌入式界面的开发选择开放源码的 Linux 操作系统作为平台,采用 MiniGUI 作为图形用户界面支持系统。 其相应的版本号如下: Linux 操作系统的版本为 RedHat。 GNU C编译器版本为。 图形用户界面支持系统 MiniGUI 的函数库源代码 libminigui 版本为。 MiniGUI 所使用的资源文件 miniguires 版本为 的上述文件代码可在网站 上下载到。 由于本次工作只做 LMTGUI 的部分开发,即不涉及 LMTGUI 在相应硬件平台上的移植和测试,所以在此不介绍开发相应系统的硬件平台。 在 PC 机上的开发 由于在嵌入式系统环境下调试 MiniGUI程序比较复杂,为了缩短开发周期,可以先将程序在 PC机上调试,成功后加载进嵌入式 Linux的文件系统即可。 由于不涉及 LMTGUI的移植,在此将不会介绍移植过程。 第一:设置 MiniGUI运行环境。 为了运行 MiniGuI,需要激活系统的 FrameBuffer设备驱动程序。 由于安装的 Linux系统是 RedHat ,且在安装 Red Hat 时使用了 GRUB作为引导装载器,其激活 FrameBuffer过程如下:首先需要修改/boot/grub/,在第一个出现 Red Hat Linux()的地方,把它修改为 Red Hat Linux(, FrameBuffer)。 并在 kernel打头的一行添加vga=。 第二:建立 MiniGUI运行环境。 要开发 MiniGUI程序,首 先要建立其开发环境。 MiniGuI图形系统由函数库、资源及演示程序组成。 MiniGUI的函数库部分由libminigui, libmgext以及 libvcongui三个函数库组成。 MiniGUI的资源部分包括西北大学学士学位论文 12 运行 MiniGUI应用程序需要的基本字体、图标、位图以及鼠标光标等。 安装上述源文件的过程如下所述。 首先安装 MiniGUI的资源文件。 第一步, 使用 tar命令解开,使用如下命令: $tar zxf。 该命令将建立。 第二步,用 cd命令改变到新建的目录中,然后以超级用户的身份运行 make install命令:make install。 其次配置和编译 ,使用 tar解开 的目录。 该命令将建立。 第二步,改变到这一新目录,然后运行 ./configure:,命令如下 $./,运行下面命令编译并安装MiniGUI: $make。 第四步,修改 /etc/,将 /usr/local/lib目录添加到该文件的最后一行。 第五步,安装 MiniGUI之后,运行下面的命令更新共享函数库系统的缓存: ldconfig。 第三:图形用户界面的开发。 图形用户界面的开发流程图如图 51所示。 (1)头文件 程序实现时,开始是包含的头文件。 在本次开发的程序中包含的 MiniGUI图形包的头文件有 : MiniGUI常用的宏及数据类型的定义; ; 、数据类型 、数据结构以及函数接口声明; MiniGUI绘图函数的接 121定义; libminigui中所有内建控件的接口定义; ( 2)程序入口点 MiniGUI的程序人口点是 MiniGUIMain函数,系统初始化后就会自动找到该函数。 再通过 调用 InitDialogBox (HWND_DESKTOP)函数初始化对话框。 本程序使用对话框模板来创建对话框和对话框中的控件。 在 MiniGUI中,对话框是一类特殊的主窗口,这种主窗 口只关注与用户的交互 —— 向用户提供输出信息,但更多的是 用于用户输入。 对话框可以理解为子类化后的主窗口类。 在 MiniGUI 中,用两个结构 CTRLDATA 和西北大学学士学位论文 13 DLGTEMPLATE 来表示对话框模板( minigui/) 【 1】 . CTRLDATA 用来定义控件, DLGTEMPLATE 用来定义对话框本身。 图 51 图形用户界面开发流程图 ( 3)对话框回调函数 在定义完对话框模板数据之后,需要定义对话框的回调函数,并调用DialogBoxIndirecParam函数建立对话框。 在程序中根据需要一 共建立了 14个控件。 包括 6个静态框, 5个按钮, 1个进度条, 1个旋钮数字框和 1个定时器。 对话框回调函数是一类特殊的主窗口回调函数。 在程序中它需要处理如下消息: MSG_INITDIALOG消息 :该消息是在 MiniGUI根据对话框模板建立对话框以及控件之后,发送到对话框回调函数的。 该消息的 lParam参数包含了由DialogBoxIndirectParam函数的第四个参数传递到对话框回调函数的值。 MSG_TIMER消息: 创建定时器时指定的窗口会收到 MSG_TIMER消息,并传递到期程序入口点 MiniGUIMain 调用 InitDialogBox (HWND_DESKTOP)函数 定义对话框各控件 建立对话框及控件 定义对话框 定义对话框回调函数 对话框与控件, 控件与控件间消息传递 程序退出 西北大学学士学位论文 14 的定时器标号。 定时器消息是优先级最低的消息类型,只有消息队列中不存在其他类型的消息时,系统才会去检查是否有定时器的到期。 在程序中用定时器来 确定加热的时间长短,并在进度条中显示出来。 MSG_COMMAND消息 : 当命令按钮被击中后,从该按钮发送一个消息到窗口或其对话框。 其中按钮标识符 id= LOWORD(wParam),通知消息的代码为: code = HIWORD(wParam)。 在程序中因为有多个按钮控件,所以要多次用到该消息。 ( 4) 程序的退出 在程序中,当单击 EXIT按钮时,会按顺序调用函数 DestroyAllControls (hDlg)和函数 EndDialog (hDlg, wParam)来结束程序。 DestroyAllControls销毁对话框中的所有子控件, EndDialog用来销毁对话框本身。 6LMAGUI描述 LMTGUI 作为一种激光医疗设备上的嵌入式界面,非常小,性能好,效率比较高,占用的资源少。 它一共分为 6 个子界面,如图 61所示。 在进入系统界面的正中间有一行提示语言:“ Wele to system!” 在其左下方有“ NEXT” 按钮 ,通过单 击此按钮可进入预热时间设置界面。 “ NEXT” 按钮通过隐藏进入系统界面中的子控件,显示下一界面的子控件来完成程序赋予它的功能。 其相应的源代码如下所示。 case IDC_COM1: /*Show IDC_STATIC2,IDC_DATA,IDC_STATIC3。 hide IDC_STATIC1,IDC_COM1.*/ SendDlgItemMessage(hDlg, IDC_DATA, CB_SETSPINRANGE, 1, 20)。 /*SET THE RANGE 120 OF IDC_DATA*/ SendDlgItemMessage(hDlg, IDC_DATA, CB_SETSPINVALUE, 5, 0)。 hwnd1=GetDlgItem (hDlg, IDC_STATIC1)。 hwnd2=GetDlgItem (hDlg, IDC_COM1)。 hwnd3=GetDlgItem (hDlg, IDC_STATIC2)。 hwnd4=GetDlgItem (hDlg, IDC_COM2)。 hwnd5=GetDlgItem (hDlg, IDC_DATA)。 hwnd6=GetDlgItem (hDlg, IDC_STATIC3)。 if (hwnd1amp。 amp。 hwnd2amp。 amp。 hwnd3amp。 amp。 hwnd4amp。 amp。 hwnd5amp。 amp。 hwnd6) 西北大学学士学位论文 15 {DestroyWindow (hwnd1)。 /*ShowWindow(hwnd1,SW_HIDE)。 */ DestroyWindow (hwnd2)。 /*HWND GUIAPI GetDlgItem (HWND hDlg, int nIDDlgItem)*/ ShowWindow(hwnd3,SW_SHOW)。 ShowWindow(hwnd4,SW_SHOW)。 ShowWindow(hwnd5,SW_SHOW)。 ShowWindow(hwnd6,SW_SHOW)。 } else return 0。 break。 图 61 LMAGUI 系统界面 进入系统的界面图如图 62所示: 预热时间设置界面 预热过程等待界面 退出系统界面 进入系 统界面 正常工作界面 工作暂停界面 西北大学学士学位论文 16 图 63 预热时间设置界面 图 62 系统进入界面 在第 二 个预热时间设置界面 (如图 63) 中一共有 4个控件,它们分别是预热时间设置提示语言,预热时间设置框,确定按钮以及退出按钮。 提示语言代码和按钮的代码基本与前面的相同,下面着重列出预热时间设置框 接受用户输入的时间 的代码: (在用户单击确定按钮时,处理预热时间设置框接受到的数据,并设置好定时器) min = SendDlgItemMessage(hDlg, IDC_DATA, CB_GETSPINVALUE, 0, 0)。 /*获得用户所设置的预热时间 ,单位为分钟 */ SetTimer(hDlg,IDC_TIMER,500)。 /*给对话框发一次定时消息 */ hOldCursor = SetDefaultCursor (GetSystemCursor (IDC_WAIT))。 /*设置鼠标状态为忙 */ 第三个界面为预热过程等待界面,在等待过程中,选用进度条作为 直观的已等待时间显示,让用户的等待不至于没有期望,减少用户对系统的焦虑。 进度条控件的显示参数设置如下: { progressbar, WS_CHILD|PBS_NOTIFY, 10, 40, 380, 20, IDC_PROGRESS, NULL, 西北大学学士学位论文 17 0 }, 其相应的操作行为代码如下: SendMessage(hwnd1,PBM_SETPOS,0, 0)。 /*hwnd1为 进度条的操作句柄,该函数设置进度条的起始位置为 0,进度方向为前进方向 */ SendDlgItemMessage(hDlg, IDC_PROGRESS, PBM_DELTAPOS, 5, 0)。 /*设置进度条的进行过程进度 ,定时器每发送一次定时消息,进度加 5*/ SendDlgItemMessage(hDlg, IDC_PROGRESS, PBM_SETRANGE,1, min*60)。 /*,设置进度条的进度范围,从 1到 min*60, min为用户设置的时间 */ 当用户设置的时间到达时,即进度条到达最大值时,系统会自动进入正常工作状态界面。 正常工作界面主要是为了表明系统正在进行工作,并且工作正常。 若想停止系统工作,可单击此界面下的“ STOP”按钮,则 系统会进入工作暂停界面。 通过单击“ EXIT”按钮,可进入最后一个界面,即退出系统界面,在该界面有“ Thanks using the system!”作为系统退出界面的提示语言。 在退出界面时会做一些善 后工作,先处理一些系统的信号,并销毁所有子控件和对话框 , 让系统稳定退出。 7 结论 在开发应用于激光医疗设备的嵌入式系统界面 LMAGUI中,首先熟悉了 Linux操作系统,它是一种可配置的,稳定性好,源码开放的系统,非常适合于嵌入式系统的开发。 用 C 语言写成的 MiniGUI 采取的是事件加消息的驱动机制,非常接近于 面向对象的编程语言。 由于 它本身小巧的特点,常用于中小型系统的嵌入式界面开发。 在开发过程中不但熟悉了这些软件,还掌握了开发嵌入式界面的基本流程。 激光医疗设备的操作比较简单,这使得 LMAGUI 的界面也相对简洁。 在开发过程中,主要用模板对话框来建立系统界面的,通过控件之间 以及控件与对话框之间 的消息。基于minigui的嵌入式gui开发
相关推荐
判断该行是否有输入如果没有输入的话 P14P15 电平如果有输入的话P14P15 电平就会触发中断进入中断服务程序获得输入数据键盘的扫描时间很短仅仅几微妙的时间然而按键的时间一次至少需要几十毫秒所以只要有按键按下的话是都可以被扫描到的另外还要考虑键盘的抖动处理 [13]为了防止键盘的扫描而影响其他部分的处理这里采用了定时器 B来检 察是否有按键按下图 43为该部分的程序流程图
用 proteus进行调试 ........................................................................................ 19 用 protel DXP绘制 PCB板 .........................................................................
搬运物体以完成在各个不同环境中的工作。 工业机械手是近似自动控制领域中出现的一项新技术,并已成为现代制造生产系统中的一个重要组成部分。 机械手主要由手部、运动机构和控制系统三大部分组成。 手部是用来抓持工件(或工具)的部件,根据被抓持物件的形状、尺寸、重量、材料和作业要求而有多种结构形式,如夹持型、托持型和吸附型等。 运动机构,使手部完成各种转动(摆动)、移动或复合 运动来实现规定的动作
贝时所占用的资源。 2 硬件开发:用 SOPC Builder 定义 NiosII 处理器系统,用 Quartus 软件定义器件、分配管脚并编译。 3 软件开发: C/C++程序开发,开发定制硬件的驱动程序,定制硬件平台为目标基于 Nios_II的电流 /电压表设计 6 进行编译连接。 4 下载到开发板上进行验证 5 成功完成 NiosII 系统设计 a 硬件开发流程 用 SOPC
间的区别 [2]。 对无线接入技术的仿真 采用 OPNET 软件对 IEEE802. 16d 网络的 BS、 SS 进行了节点和进程域的研究建模,对 MAC 进程状态进行了系统和详细的分析,研究并编写模块的出口、入口函数。 建立了 802. 16d 的网络仿真平台,对 BS、 SS 模块通信机制进行仿真,并对链路吞吐量等参数进行性能测试与分析。 通过对调度服务中的实时轮询业 务 rtPS
数,每个继承类实现自己的功能。 ( 3)节点( Node):节点是对实际网络中分布在不同地理位置的主机、交换机、路由器等网络设备的统一抽象,是构成网络拓扑结构的一个重要组成部分。 ( 4)链路 (Link):链路用来连接节点和路由器。 一个节点可以有一条或多条输出链路 (如路由器 ),所有的链路都以队列的形式来管理分组到达、离开或丢弃,统计并保存字节数和分组数。