本帖最后由 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). 程序运行起来,开发板看到的就是这样啦(拍照出来,颜色有点失真)
至此便可以正常显示图形界面啦,基本移植即告一段落,至于触摸屏的使用,以及其他优化,可以根据项目具体实战。