Helper2416开发板移植ucgui(嵌入式linux运行ucgui)

1050阅读 0评论2016-02-26 fly123456789
分类:LINUX


一些简单的应用,使用ucgui作为图形界面可能更加方便快捷。得益于ucgui良好的可移植性,移植工作也非常简单,借助于eclipse,甚至不需要编写makefile,而且可以使用图形界面进行调试。
    移植基本原理是ucgui通过接口直接操作framebuffer设备,液晶屏便显示相应图形。 以下是基本移植过程。

1. 修改 GUIConf.h 文件
#define  GUI_OS    (1)      //这个宏定义为1,即使用OS

2. 修改 LCDConf.h 文件
#define LCD_BITSPERPIXEL  (16)
#define LCD_XSIZE         (480)
#define LCD_YSIZE         (272)
#define LCD_SWAP_XY    (0)
#define LCD_SWAP_RB    (1)
根据实际使用屏的参数修改这几个宏

3. 创建io_fb.c及io_fb.h文件,提供framebuffer访问接口
接口函数主要包括
fb_init            初始化fb设备
fb_setpixel     画点函数
fb_readpixel  读点函数
具体内容可以从附属资源中下载查看

4. 修改LCDDriver.c文件,添加framebuffer的支持
基本移植只修改以下函数就可以了。
//LCD初始化
int  LCD_L0_Init(void) {
  return fb_init();
}

//画点函数
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) {
  /* Convert logical into physical coordinates (Dep. on LCDConf.h) */
  #if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
    int xPhys = LOG2PHYS_X(x, y);
    int yPhys = LOG2PHYS_Y(x, y);
  #else
    #define xPhys x
    #define yPhys y
  #endif
  /* Write into hardware ... Adapt to your system */
  {
    fb_setpixel(480, 272, xPhys, yPhys, PixelIndex);
  }
}

//读点函数
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
  LCD_PIXELINDEX PixelIndex;
  /* Convert logical into physical coordinates (Dep. on LCDConf.h) */
  #if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
    int xPhys = LOG2PHYS_X(x, y);
    int yPhys = LOG2PHYS_Y(x, y);
  #else
    #define xPhys x
    #define yPhys y
  #endif
  /* Read from hardware ... Adapt to your system */
  {
    PixelIndex = 0;
    PixelIndex = fb_readpixel(480, 272, xPhys, yPhys);
  }
  return PixelIndex;
}

5. 创建GUI_X_Linux.c 文件,添加操作系统对GUI的支持
用一个互斥信号量对GUI资源进行加锁解锁。
//解锁
void GUI_X_Unlock(void)    {
  pthread_mutex_unlock(&mutex);
  return;
}
//锁定
void GUI_X_Lock(void)      {
  pthread_mutex_lock(&mutex);
  return;
}
其他函数具体内容可以从附属资源中下载查看

6. 使用eclipse编译
(1) 建立工程 File-->New-->Project
(2) 拷入代码
如上图所示,ucgui的相关内容包括两个目录
ucgui             ucgui与平台无关的核心代码
ucgui_port     移植部分单独放到这里
用户程序(例如main.c)放入app目录
(3) 设置工程
打开 Project-->Properties-->C/C++Build 进行设置
GCC C Compiler部分:
      Command  --> 将gcc改成arm-linux-gcc
      Directories --> 添加路径 ucgui/GUI/Core
                                             ucgui/GUI/Widget
                                             ucgui/GUI/WM
                                             ucgui_port
GCCC Linker部分:
       Command --> 将gcc改成 arm-linux-gcc
       Libraries    --> 添加m选项,否则无法调用math.h中的函数
GCC Assembler部分:
       Command --> 将as 改成arm-linux-as

这时,点击 Project-->Build Project即可进行编译了

7. 调试及运行
(1). 修改开发板/etc/init.d/rcS,禁止qtopia自动运行
(2). 启动开发板,通过nfs挂载到ucgui所在工程目录,并进入可执行文件所在目录
(3). 开发板运行gdbserver,假设端口为1234,可执行文件名为ucgui-emblinux
#gdbserver :1234 ucgui-emblinux
(4). 宿主机eclipse进行调试设置Run-->Debug Configurations,
如下图所示,其中192.168.1.222是开发板的ip地址
(5). 调试起来,界面如下图所示,可以单步运行,查看变量等等
(6). 程序运行起来,开发板看到的就是这样啦(拍照出来,颜色有点失真)

至此便可以正常显示图形界面啦,基本移植即告一段落,至于触摸屏的使用,以及其他优化,可以根据项目具体实战。
上一篇:MINIGUI常见错误集及解决方法
下一篇:NXP恩智浦 Freescale飞思卡尔后你需要知道的十件事