15636|14

39

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

Helper2416开发板移植ucgui(嵌入式linux运行ucgui) [复制链接]

 
本帖最后由 Gyroxp 于 2015-1-30 17:28 编辑

     一些简单的应用,使用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). 程序运行起来,开发板看到的就是这样啦(拍照出来,颜色有点失真)

至此便可以正常显示图形界面啦,基本移植即告一段落,至于触摸屏的使用,以及其他优化,可以根据项目具体实战。
ucgui-emblinux.zip (3.33 MB, 下载次数: 840)

最新回复

下载了代码在ubuntu的eclipse运行提示错误Exec_tty error:Cannot run program "/opt/ucgui-emblinux/Debug/ucgui-emblinux": Unknown reason 可能是什么原因啊   详情 回复 发表于 2019-7-19 10:21
点赞(1) 关注(1)

回复
举报

554

帖子

0

TA的资源

版主

沙发
 
直接加精吧,我还能说什么呢?
 
个人签名My dreams will go on...
http://www.jyxtec.com
 

回复

234

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
先顶下,赞一个, 不过都上linux了, 我想qt应该比ucGUI强大多了吧

点评

QT的加载速度相对较慢、体积较大,对于有强迫阵的用户,会有这种需求!我只担心版权问题。。。  详情 回复 发表于 2015-1-30 19:15
呵呵,视具体情况而定,多个选择  详情 回复 发表于 2015-1-30 19:03
 
 
 

回复

39

帖子

2

TA的资源

一粒金砂(中级)

4
 
foxpro2005 发表于 2015-1-30 18:49
先顶下,赞一个, 不过都上linux了, 我想qt应该比ucGUI强大多了吧


呵呵,视具体情况而定,多个选择

 
 
 

回复

554

帖子

0

TA的资源

版主

5
 
本帖最后由 spacexplorer 于 2015-1-30 19:19 编辑
foxpro2005 发表于 2015-1-30 18:49
先顶下,赞一个, 不过都上linux了, 我想qt应该比ucGUI强大多了吧

QT的加载速度相对较慢、体积较大,对于有强迫症的用户,会有这种需求!我只担心版权问题。。。

点评

仅供学习,仅供参考  详情 回复 发表于 2015-1-30 22:01
 
个人签名My dreams will go on...
http://www.jyxtec.com
 
 

回复

39

帖子

2

TA的资源

一粒金砂(中级)

6
 
spacexplorer 发表于 2015-1-30 19:15
QT的加载速度相对较慢、体积较大,对于有强迫症的用户,会有这种需求!我只担心版权问题。。。

仅供学习,仅供参考


 
 
 

回复

240

帖子

4

TA的资源

一粒金砂(中级)

7
 
请教下楼主  更改前的ucgui源码从哪获得?这个源码是不是所有的通用的呢(比如和cortex M3)?

点评

网上很多地方能下载,比如codeforge.cn里就有。或者直接下载本文附件也行,附件已将核心代码和移植部分分开放置,很清晰。  详情 回复 发表于 2015-5-21 19:34
 
 
 

回复

39

帖子

2

TA的资源

一粒金砂(中级)

8
 
abszy 发表于 2015-5-14 16:25
请教下楼主  更改前的ucgui源码从哪获得?这个源码是不是所有的通用的呢(比如和cortex M3)?

网上很多地方能下载,比如codeforge.cn里就有。或者直接下载本文附件也行,附件已将核心代码和移植部分分开放置,很清晰。
 
 
 

回复

1173

帖子

3

TA的资源

五彩晶圆(初级)

9
 
eclipse都是在Linux环境下运行的吗?

点评

eclipse是在linux下运行的。如果你知道在windows下使用eclipse达到上述目的,请教我。  详情 回复 发表于 2015-7-31 14:06
 
 
 

回复

458

帖子

1

TA的资源

一粒金砂(高级)

10
 
好资源,真心好楼主,学习学习,真心希望电子工程世界这个论坛越来越好,希望大家都能来支持楼主
 
 
 

回复

39

帖子

2

TA的资源

一粒金砂(中级)

11
 
ou513 发表于 2015-6-11 11:36
eclipse都是在Linux环境下运行的吗?

eclipse是在linux下运行的。如果你知道在windows下使用eclipse达到上述目的,请教我。
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

12
 
支持楼主,感谢分享,学习学习!!!
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
非常感谢楼主的无私奉献!!
 
 
 

回复

6105

帖子

4

TA的资源

版主

14
 
谢谢分享!!!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 

下载了代码在ubuntu的eclipse运行提示错误Exec_tty error:Cannot run program "/opt/ucgui-emblinux/Debug/ucgui-emblinux": Unknown reason 可能是什么原因啊

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表