ucgui移植到rt_thread simulator

  上个阶段在mini2440开发板上移植了rt_thread,rtgui是个不错的gui,但是重新在学习一遍太麻烦,对ucgui比较熟悉,所以决定rt_thread不使用原生的rtgui而改用ucgui。ucgui的移植比较简单,无非就是修改几个API,网上的教程也比较详细。现在需求是在window上实现仿真,有考虑过用模拟器,但发现模拟器的水很深,不是我这个小菜鸟几天内能解决的。所以决定使用rt_thread simulator来进行仿真。

  言归正传,使用vs2008进行开发,使用ucgui3.98版。将ucgui的源码拷贝到rt_thread的components目录下,添加SConscript文件。文件内容:

Import('RTT_ROOT')
from building import *

src    = Glob('*.c')
CPPPATH = [RTT_ROOT + '/components/ucgui']
group = DefineGroup('ucgui', src, depend = ['RT_UCGUI'], CPPPATH = CPPPATH)

Return('group')

  运行cmd 在rt_thread simulator 这个bsp目录下运行scons --target==vs -s  打开VS编译。如果不出意外的话会出现缺少lcd.h文件的提示。既然缺少,那就加个呗,直接在simulator文件下创建lcd.h

lcd.h:

#ifndef __LCD_H__
#define __LCD_H__

#include <rtthread.h>


#define LCD_WIDTH 800
#define LCD_HEIGHT 480

//void rt_hw_lcd_init(void);
//void LCD_PowerON(void);
//void LCD_PowerOFF(void);

#endif

  先这样加着,接着编译,报错是肯定的,接下来就是实现ucgui的帧缓存跟触摸的API的编写,先写到这里,下午接着捣鼓,能不能成心里没数,没使用过simulator,不过既然rtgui都能运行,ucgui应该也能成,先这样吧,吃饭去喽。

  OK,接着移植,之前在rtt mini2440分支上做过移植,神马帧缓存,触摸。那是一看就知道。换到simulator 那是一个都找不到。当然不是没有,菜鸟没有认真研究而已。按照2440的移植经验,在driver这个目录里肯定有对帧缓存进行设置,果不其然,打开simulator里的driver目录下的SConscript。这个链接文件写的很清楚,这里就不贴代码了,在 if GetDepend('RT_USING_RTGUI') == False 后加上 and GetDepend('RT_UCGUI') == False 这样在vs工程里就能生成sdl_fb.c这个文件,也就是虚拟现实设备的设置。一编译,提示缺少sdl.h。看来没那么容易啊。这里一直出现sdl,找下工程里面有个SDL.dll,按照经验simulator应该有用到一些开源的工具,度娘下sdl,果不其然。

  SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

  回到simulator目录下的SConscript,认真阅读一遍果然发现需要动态链接。将if GetDepend('RT_USING_RTGUI'):改为if GetDepend('RT_USING_RTGUI') == True or GetDepend('RT_UCGUI') == True:再次编译,缺少sdl.h的问题解决了。这样工程就能用SDL这个开源的工具。但又出现问题,缺少rtgui/driver.h,到这里接下来就是模仿rtgui/driver.h编写ucgui/driver.h

 

posted @ 2013-09-29 11:35  missccq  阅读(1509)  评论(0编辑  收藏  举报