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

建立eclipse工程.jpg (132.91 KB, 下载次数: 2)

2015-1-30 16:40 上传

(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地址

调试设置.JPG (128.03 KB, 下载次数: 1)

2015-1-30 17:06 上传

(5). 调试起来,界面如下图所示,可以单步运行,查看变量等等

调试界面.jpg (133.29 KB, 下载次数: 1)

2015-1-30 17:07 上传

(6). 程序运行起来,开发板看到的就是这样啦(拍照出来,颜色有点失真)

Helper2416开发板运行ucgui.jpg (1.47 MB, 下载次数: 0)

2015-1-30 17:09 上传

至此便可以正常显示图形界面啦,基本移植即告一段落,至于触摸屏的使用,以及其他优化,可以根据项目具体实战。

ucgui-emblinux.zip

(3.33 MB, 下载次数: 830)

2015-1-30 17:27 上传

点击文件名下载附件

嵌入式linux ucgui,Helper2416开发板移植ucgui(嵌入式linux运行ucgui)相关推荐

  1. 烧写linux系统到开发板中,【嵌入式开发】向开发板中烧写Linux系统

    作者 : 万境绝尘 终于拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧写内容 : Bo ...

  2. linux下s3c2440开发板,SAMSUNG S3C2440 ARM LINUX 开发板 上手初体验 --开发环境搭建

    1,linux开发环境搭建 2,程序测试 easyOpentag驱动安装,打开连接,选择ARM-linux 1,环境搭建 我的系统版本 root@ubuntu:~# lsb_release -a No ...

  3. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  4. 北京迅为i.mx6ull终结者开发板使用手册+嵌入式Linux开发指南+裸机手册下载地址

    i.MX6ULL终结者三大手册,加速学习和开发速度,一秒化无形! <嵌入式Linux开发指南>+<开发板使用手册>+<裸机使用手册> 详细手册点击链接下载:http ...

  5. 新手学习嵌入式Linux和Android开发板推荐

    一,确定目标,linux是一个非常非常大的概念.想全部吃透是不可能的.理想的说,搞懂linux,就可以做所有工作.个人更倾向于说想做什么样工作,需要侧重学linux的哪部分. 二,选择开发板 学习嵌入 ...

  6. linux网线插拔后ip地址丢失,网线拔掉检测,嵌入式网线直连开发板断电网线拔掉之后,上电仍能自动设置static静态ip地址...

    网线拔掉检测,嵌入式网线直连开发板断电网线拔掉之后,上电仍能自动设置静态ip地址 1.首先设置永久固定静态ip地址 luther@gliethttp:~$ sudo vim /etc/network/ ...

  7. 在arm Cortex-A9开发板移植rtl8821au无线网卡并实现与外网通信

    开发板:Xilinx ZC702 嵌入式系统:linux4.4 交叉编译器:arm-xilinx-linux-gnueabi-gcc WIFi工具:wireless_tools.30.rtl 驱动版本 ...

  8. 野火iMX6ULL Pro开发板移植SDL2

    承诺的Linux三部曲移植还没写完,差个根文件系统没有写呢,但实在压抑不住内心的亢奋情绪,先把SDL2移植奉献给大家吧.关于SDL的移植,已经进行一个月了,之前把SDL移植成功后打算写Python的模 ...

  9. 开发板移植RTOS操作系统,RTOS操作系统适配开发板整理大全

    文章目录 一.单片机/嵌入式有无操作系统的区别 二.操作系统时的分层架构图 三.移植FreeRTOS到小熊派开发板(STM32L431RC) 1. 硬件准备 2. 下载FreeRTOS源码 2.1. ...

  10. 全志V853开发板移植基于 LVGL 的 2048 小游戏

    LVGL 开发实战 移植基于 LVGL 的 2048 小游戏 这一节将以一个已经编写好的 lvgl 小游戏 2048 描述如何将已经编写完成的 lvgl 程序移植到开发板上. 这里使用的 2048 小 ...

最新文章

  1. git是航空母舰:ScrumBoard
  2. 思科发力虚拟化和云服务 推出多款新品
  3. 02基于python玩转人工智能最火框架之TensorFlow人工智能深度学习介绍
  4. 华为 命令 so easy
  5. Android 软键盘相关问题
  6. arduino消息服务器,在C(Arduino IDE)中将API链接消息解析为服务器(示例代码)
  7. (pytorch-深度学习)双向循环神经网络
  8. hql删除mysql语句_hibernate hql删除异常
  9. 推荐制作精良的笔记软件Wire Note 应用键盘钩子技术获取即时数据 资料查阅的好工具 建立代码片段数据库...
  10. Arduino应用开发——通过小爱同学控制灯光
  11. nodejs调用阿里云盾身份证二要素验证
  12. cba篮球暂停次数和时间_篮球比赛一节有几次暂停?
  13. Windows Server下独立根CA的安装及使用(超详细)
  14. 四级网络工程师试题二
  15. Unity技术手册 - 粒子基础主模块属性-中
  16. 学计算机要Ghz,ghz是什么意思,电脑ghz是什么意思?
  17. AutoCAD2006激活方法
  18. 啥是预乘?——Nuke中的Premult(预乘)和Unpremult(预除)
  19. custom_setting
  20. 《首席执行官》观后感

热门文章

  1. BIN文件和HEX文件区别
  2. win10安装打印机驱动的方法,电脑打印机驱动安装教程
  3. 目标检测:Object Detection in 20 Years: A Survey
  4. php网站服务器工具,PHP网站服务器管理软件LuManager1.1.9发布
  5. 因果推断笔记——DML :Double Machine Learning案例学习(十六)
  6. freemaker eclipse 插件下载
  7. 百度富文本编辑器的宽度自适应
  8. Qt-十字消除小游戏
  9. 基于matlab的信号频谱分析 开题报告,基于MATLAB的数字信号处理开题报告
  10. Idea如何设置页面内容模板