中自网

热门搜索:PID  plc  传感器  电机  变频器  工业以太网  无线通讯  低压 

当前位置:首页>>应用案例首页>>专业论文>>正文

基于PowerPC平台Linux系统的人机界面设计与开发

发布日期:2018-05-29   来源:《智慧工厂》2期   作者:闫丽   浏览次数:24146
分享到:
【摘   要】:随着嵌入式的飞速发展,嵌入式Linux系统人机界面受到越来越多的关注,如何开发出一套具有高可靠性、使用寿命长、可进行多线程、多任务实时性等性能成为现如今人机界面交互的研究重点。本文采用PowerPC嵌入式平台植入Linux操作系统,使用MiniGUI图形开发,设计出具有实时性和高效性的人机界面。

 关键词:PowerPC   Linux   MiniGUI   人机界面

Abstract: With the rapid development of embedded system, the man-machine interface of embedded Linux system has received more and more attention. How to develop a set of high reliability, long service life, multi-threading, multi-task real-time performance, etc. Become the focus of research on human-machine interface interaction. This article adopts PowerPC embedded platform to implant Linux operating system, use MiniGUI graphics development, and design a human-machine interface with real-time and high efficiency.

Keywords: PowerPC Linux MiniGUI human-machine interface

【中图分类号】TP316.85 【文献标识码】文章编号1606-5123201802-0000-00

1 引言

如今,嵌入式开发已经作为一个热门话题,涉及到各个领域。由于嵌入式的飞速发展,嵌入式操作系统中的Linux系统具有功耗低、可靠性强、功能强大、性价比高、实时性强、支持多任务、占用空间小、效率高等特点,得到了越来越多开发者的青睐,本文采用了PowerPC嵌入式平台移植Linux操作系统进行人机界面的设计开发。

2 原理设计

2.1 PowerPC平台

本文所用到的powerpc平台为南瑞自主研发的基于Linux系统的,powerpc通用平台,采用MPC8309处理器,主频达400 MHzDDR2时钟266 MHz;对外提供1CAN网接口;提供8/16RS-485串口,最高速率38400;提供210M/100M自适应以太网口;基于Linux操作系统,内核版本2.6以上。







从图2中,可得本文所设计的人机界面具有有参数配置,数据实时显示,采集可控等功能,系统采用Linux 2.6.34版本,通过系统接口调用来完成内部进程及外设的交互。主要包括:u-boot引导、kernelramdisk+ubifs文件系统及miniGUI库。以及相关驱动程序。通过启动多进程显示各个功能,如启动采集控制进程,可进行共享内存建立、实时数据采集交互等功能;启动数据告警进程,可进行数据分析和告警条件判断等功能;还可启动外设通讯接口进程,进行串口、以太网口及can网的通讯功能。

2.4 图形界面开发

本文采用MiniGUI图形系统进行界面显示开发,MiniGUI具有可伸缩强、轻型、占用资源少、高性能、高可靠性、可配置性等特点,所以本文嵌入式系统MiniGUI进行界面开发。

由于在目标板中调试MiniGUI较繁琐,需要频繁的往目标板中下载程序,所以通常,我们先将MiniGUI安装在PC机中,在PC机开发调试,最后进行交叉编译后下载到目标板中。

本文将MiniGUI安装在PC机中的Ubuntu10.04虚拟机中。现在虚拟机中安装minigui的相关库文件,如libminigui-gpllibmgplusFreetypejpegsrclibpngqvfbzlib等库,通过命令configuremake将这些库安装完成,即可进行MiniGUI程序编写工作。

3 MiniGUI的图形界面开发

本文界面显示流程图参见图3所示。


window.h 包含了窗口有关的宏、数据类型、数据结构定义以及函数接口声明。

使用预定义控件的MiniGUI 应用程序还必须包括另外一个头文件<minigui/control.h>

control.h 包含了 libminigui 中所有内建控件的接口定义。

所以一个minigui程序的开始通常都要包括以下的头文件:

#include <minigui/common.h>

#include <minigui/minigui.h>

#include <minigui/gdi.h>

#include <minigui/window.h>

#include <minigui/control.h>

3.2 MiniGUI程序开发入口程序

一般MiniGUI程序的入口点为MiniGUIMain函数,本文所使用的函数原型为:int MiniGUIMain (int argc, const char* argv[])

因为main函数已经在MiniGUI的库函数中定义,该函数在进行一些MiniGUI的初始化工作后调用MiniGUIMain函数。所以每个MiniGUI应用程序的入口点均为MiniGUIMain。参数argcargvC程序main函数的参数含义是一样的,分别为命令行参数个数和参数字符串数组指针。

3.3 MiniGUI界面程序

每个MiniGUI应用程序的初始界面一般都是一个主窗口,通过调用CreateMainWindow函数来创建主窗口,其参数是一个指向MAINWINCREATE结构的指针,本文创建窗口函数为:

int Logo()

{

       MSG Msg;

    HWND hMainWnd;

    MAINWINCREATE CreateInfo;

      

    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER ;

    CreateInfo.dwExStyle = WS_EX_NONE;

       CreateInfo.spCaption = "标题";

    CreateInfo.hMenu = 0;

    CreateInfo.hCursor = GetSystemCursor(0);

    CreateInfo.hIcon = 0;

    CreateInfo.MainWindowProc = LogoWinProc;

    CreateInfo.lx = 0;

    CreateInfo.ty = 0;

    CreateInfo.rx = 640;

    CreateInfo.by = 480;

    CreateInfo.iBkColor = COLOR_black;

    CreateInfo.dwAddData = 0;

    CreateInfo.hHosting = HWND_DESKTOP;

   

    hMainWnd = CreateMainWindow (&CreateInfo);

   

    if (hMainWnd == HWND_INVALID)

        return -1;

      

    ShowWindow(hMainWnd, SW_SHOWNORMAL);

      

    while (GetMessage(&Msg, hMainWnd))

       {

        TranslateMessage(&Msg);

        DispatchMessage(&Msg);

    }

      

    MainWindowThreadCleanup (hMainWnd);

      

       return 0;

}

主窗口函数中定义CreateInfoMAINWINCREATE 结构;CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER ;设置主窗口风格,窗口设置为初始可见,并具有边框;CreateInfo.dwExStyle = WS_EX_NONE;设置主窗口的扩展风格,该窗口没有扩展风格;CreateInfo.spCaption = "标题";设置窗口标题;CreateInfo对窗口属性进行设置,还设置了主窗口主菜单样式、光标样式、主窗口图标、主窗口在屏幕上的位置、主窗口背景色、主窗口形式等。调用ShowWindow(hMainWnd, SW_SHOWNORMAL)函数将创建的窗口显示到屏幕上,第一个参数为要显示的窗口句柄,第二个参数为窗口显示方式。

调用ShowWindow函数后,主窗口会显示到屏幕上,然后进入消息循环。MiniGUI为每一个MiniGUI程序维护一个消息队列。在发生事件之后,MiniGUI将事件转换为一个消息,并将消息放入目标程序的消息队列之中。消息循环代码如下:

    while (GetMessage(&Msg, hMainWnd))

       {

        TranslateMessage(&Msg);

        DispatchMessage(&Msg);

    }

只要从消息队列中取出的消息不为MSG_QUITGetMessage就返回一个非0值,消息循环将持续下去。MSG_QUIT消息使GetMessage返回0,导致消息循环的终止。TranslateMessage函数把击键消息转换为MSG_CHAR消息,然后直接发送到窗口过程函数。DispatchMessage函数最终将把消息发往该消息的目标窗口的窗口过程,让它进行处理。本文中的窗口过程函数为LogoWinProc,函数代码如下:

static int LogoWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)

{

       switch(message)

       {

       case MSG_CREATE:

                     ……

              return 0;        

 

       case MSG_PAINT:

……

        return 0;

             

       case MSG_ERASEBKGND:

                     ……

              return 0;

             

    case MSG_KEYDOWN:

               ……

              return 0;

             

       case MSG_TIMER:                    

                     ……

              return 0;

             

       case MSG_CLOSE:

                     ……

              return 0;               

       }    

      

       return DefaultMainWinProc(hWnd, message, wParam, lParam);

}

本文所使用个消息有MSG_CREATE窗口创建消息,MSG_PAINT窗口绘制消息, MSG_ERASEBKGND窗口绘制背景消息,MSG_KEYDOWN键盘消息,MSG_TIMER系统消息定时器,MSG_CLOSE系统关闭消息。当点击关闭按钮时,窗口过程函数将收到一个MSG_CLOSE 消息,应该程序收到MSG_CLOSE 消息时调DestroyMainWindow 函数销毁主窗口,程序最后调用MainWindowThreadCleanup 清除主窗口所使用的消息队列等系统资源并最终由MiniGUIMain 返回。

3.4 目标板环境移植及程序下载

minigui相关的库通过PowerPC工具编译链交叉编译,安装到Linux系统文件的lib库中,并将安装好的Linux系统移植到目标板中,这样目标板环境移植完成。然后将写好的应用程序通过PowerPC工具编译链交叉编译,生成的目标程序下载到目标板中,运行该目标程序。

3.5 显示效果

本文powerpc平台采用VGA液晶显示,需要在MiniGUI.cfg中配置gal_engine=fbcondefaultmode=800x600-16bpp,显示效果分别如图4、图5所示。


4 结束语

本文所介绍的PowerPC平台移植Linux系统进行的人机界面开发已经用于实际工程中,具有多线程、多任务、响应及时的特点,为今后的嵌入式系统人机界面的开发工作起到了一定的借鉴作用。

参考文献

[1]北京飞漫软件.MiniGUI移植指南[M].北京:飞漫软件技术有限公司,2006.

[2]北京飞漫软件.MiniGUI编程指南[M].北京:飞漫软件技术有限公司,2006.

[3]王文启.嵌入式Linux图形用户界面的研究与开发[D].东华大学,2007.

[4]周晓光,翟尹羚.基于嵌入式Linux下的MiniGUI的应用[J].电脑知识与技术,2006,12(10):125-127.

[5]孙少华,徐立中.面向嵌入式Linux系统的图形用户界面[J].微机发展,2005,15(10):123-125.

作者简介

闫丽 1984- 硕士研究生 研究方向:自动化装置及仪器工程

 

 


 
 
[ 应用案例搜索 ]  [ ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]  [ 返回顶部 ]

0条 [查看全部]  网友评论