logo资料库

learningGUI移植.pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
目录
1、LearningGUI 的移植
1.1、压缩包文件构造
1.2 移植原理
1.3 learningGUI 的移植硬件
1.4 learningGUI 的移植过程
1.4.1 基本工程的建立
1.4.2 复制 learningGUI 的库源码
1.4.3 填写修改 learningGUI 的驱动的代码
1.4.4 修改 config_basic.h 配置文件
1.4.5 本章小结
目录 1、LearningGUI 的移植 ................................................................................... 2 1.1、压缩包文件构造 ............................................................................... 2 1.2 移植原理 ............................................................................................ 2 1.3 learningGUI 的移植硬件 ..................................................................... 3 1.4 learningGUI 的移植过程 ..................................................................... 3 1.4.1 基本工程的建立 ....................................................................... 3 1.4.2 复制 learningGUI 的库源码...................................................... 4 1.4.3 填写修改 learningGUI 的驱动的代码 ..................................... 7 1.4.4 修改 config_basic.h 配置文件 ................................................. 9 1.4.5 本章小结 ................................................................................. 10 shaosiming
1、LearningGUI 的移植 1.1、压缩包文件构造 将压缩包 LearningGUI-GPLv3-0-3_tar.gz 解压后我们可以看见如下几个文件 夹:examples、manual、pctools、source 以及 Licensen.txt。 图 1.1:LearningGUI-GPLv3-0-3_tar.gz 压缩包下文件 其中 1、Licensen.txt 是 LearningGUI 源码需要遵循的 GPLv3 协议文本。 2、example 文件存放的是 learningGUI 的演示程序源码,其中包含有 basic 版 和 Window 版例程(具体后面讲解)。 3、manual 文件夹存放的是 LearningGUI-0-2.pdf 即用户参考手册,通过这个 手册用户可以更好的了解和使用 learningGUI。 4、pctools 存放的是将图片转换成 C 代码的工具,自动生成.c 和.h 文件以便 使用 learningGUI 的过程中调用。 5、source 文件存放着 learingGUI 的库源码,其中包含有 code 文件和 include 文件。code 为系统程序目录,include 为应用开发所需要的头文件,其中 lgui.h 是 总头文件。 1.2 移植原理 我们可以理解为 learningGUI 就是一个黑盒子即别人编写好的处理图形数据 shaosiming
的代码,它也是一个接口,我们不需要知道到它里面处理数据的过程,只需要按 照它的规定把数据交给它处理就行了。重要的是它只是一个处理图形数据的核心 接口,它帮我们做的就是把图形数据处理好了,然后再使用我们给它的画点的函 数在屏幕上一点一点的把图形输出。因为驱动显示屏幕输出一个像素点的方法不 同,所以 learningGUI 不可能帮我们集成所有的底层驱动屏幕代码。 图 1.2.1:LearningGUI 的使用与移植原理 经过以上分析我们可以明白移植 learningGUI 中我们主要做的关键就是把自 己的画点函数写好,然后按照 GUI 初始化好,也就是告诉 GUI 怎么画一个点以 及画点要做的一些步骤。其他具体移植过程中的一些重要配置文件的配置会在后 面详细讲解,比如 config_basic.h 贯穿了整个 learningGUI 的重要配置。 1.3 learningGUI 的移植硬件 此次将 learningGUI 移植到的硬件是我们多知生产的飞天 2 号开发板,开发 板上的单片机是华芯微特产的一款 SWM320 型号芯片。也许大家使用的型号不 一样,但是移植过程基本上都是一样的。 1.4 learningGUI 的移植过程 1.4.1 基本工程的建立 shaosiming
首先就是要把我们准备进行 learningGUI 移植的文件夹建立好,把板级驱动 文件、对应的 ARM 核、启动代码、SWM320 系统启动文件和头文件放入对应文 件夹内,然后把我们基本的工程建立好(具体建立工程过程不是本文重点)。 图 1.4.1:工程文件基本步骤 如图 1.4.1 工程文件基本步骤,我们要做好的几个基本步骤: 1、把工程的基本文件添加进来。 2、把必要的系统功能初始化好,特别是与屏幕显示有关的基本步骤初始化 好。 3、编译确保没有错误。 以上步骤是最基本的,也是要 必须做好的,这一部分 与我们要 移植的 learningGUI 无关,但 learningGUI 的成功移植需要建立在这个基础之上。 1.4.2 复制 learningGUI 的库源码 1、我们把 LearningGUI-GPLv3-0-3_tar 文件下的 source 整个文件夹拷贝到我 们的工程文件夹里。 shaosiming
图 1.4.2:拷贝 source 文件夹 2、在我们的工程文件夹里建立 learningGUI_Driver 文件夹,这个用于存放我 们将来编写的一些初始化以及调用 learningGUI 源文件库的用户代码,当然个人 习惯你也可以把那些文件放到其他地方去。然后我们把 LearningGUI-GPLv3-0- 3_tar\LearningGUI-GPLv3-0-3\examples\basic\basic_test_lcd 文件夹下除了 main.c 以外的文件全部拷贝到我们的 learningGUI_Driver 文件夹下(main.c 我们在后面 才用到)。 图 1.4.3 拷贝驱动文件 1、 把我们刚才拷贝的文件全部添加到工程里,特别说明:source\code 下 的源代码库也许我们并不会都用到,但是我们现在是在移植很难区 分开哪一个代码库用不到,为了能够成功移植建议把所有源文件库 加到工程里,移植成功后用户再根据实际情况进行移出工程。 shaosiming
图 1.4.3:将拷贝文件添加到工程 同时注意头文件路径的设置。 图 1.4.4:头文件路径的设置 2、 把 LearningGUI-GPLv3-0-3_tar\LearningGUI-GPLv3-0- 3\examples\basic\basic_test_lcd 文件路径下的 main.c 代码拷贝到我们 工程的 main.c 的对应位置并保存。 3、 全部编译一遍工程,确保没有错,如果编译出现错误就需要进行相 shaosiming
应的处理,如果按照上面的过程一直走下来,理论上应该不会出错, 全部编译没有错误后我们发现有几个 warnings,但通过观察这几个 warnings 并没有影响。 1.4.3 填写修改 learningGUI 的驱动的代码 我们观察 main.c 文件下 Step 1: register driver(s)下有这么几句代码:#ifdef _LG_SCREEN_ register_screen(); #endif 这部分代码很关键,它是用于注册 learningGUI 屏幕驱动显示的。我们通过 Go To Definition of‘_LG_SCREEN_’会跳跃进入一个 config_basic.h 头文件,这 个 文 件 是 Basic 版 本 配 置 宏 文 件 ; 对 应 的 还 有 一 个 config_win.h 文 件 是 Windows 版本配置宏文件;config_type.h 文件是与平台相关的数据类型定义文 件,各个文件更具体的作用可等 learningGUI 移植成功后再深入研究。 在 config_basic.h 中的注释可以知道_LG_SCREEN_是屏幕支持的一个宏定 义,因为要屏幕显示所以这个宏必须要有。 我们再 进入 register_screen() 函数 ,这 个函 数 的接口参数 配置实际 上在 LearningGUI-GPLv3-0-3_tar\LearningGUI-GPLv3-0-3\manual 文件夹下的 PDF 的 第七章 系统驱动接口开发 中有详细介绍,包括我们的移植都是参考了该 PDF 的相应内容。如果我们在 1.4.1 的步骤做好了,实际上大家所要修改的配置有以 下几处(其他参数可根据在 1.4.1 步骤所做工作进行修改): 1、修改屏幕分辨率为: screen.width = 800; screen.height = 480; 2、必须要做的修改有:lcd_output_pixel 画点函数 3 、 可 选 择 修 改 硬 件 加 速 优 化 的 有 : lcd_output_hline 输 出 水 平 函 数 、 lcd_output_vline 输出垂直函数、lcd_output_rect_fill 矩形填充函数。优化修改的三 个 函 数 根 据 screen.is_hline_accelerate 、 screen.is_vline_accelerate 、 screen.is_rect_fill_accelerate 这三个参数决定的,当对应参数置 1 则需要修改对 shaosiming
应函数,置 0 则不需要修改硬件加速函数。在这里我们三个参数的都置 0 所以不 用修改。 所 以 我 们 主 要 的 就 是 修 改 画 点 函 数 参 数 , 通 过 Go To Definition of‘lcd_output_pixel’有如下图 1.4.5 图 1.4.5:画点函数添加界面 我们把自己的画点函数写好如下图 1.4.6 图 1.4.6:画点函数 然后我们在图 1.4.5 界面中调我们的画点函数_HW_DrawPoint(x,y,color)即可。 做了以上修改以后我们可以重新全部编译一遍看是否出错,如果出错则修改过来。 以上 1.4.3 小结所作的一些修改只是对结构体 screen 的配置,最终注册 learningGUI 系 统 驱 动 接 口 的 语 句 是 在 register_screen(void) 内 的 in_driver_register(DRIVER_SCREEN, &screen)执行,进入函数内部可以知道这个 函数不仅仅可以注册屏幕驱动,而且还可以注册_LG_KEYBOARD_键盘驱动、 _LG_MTJT_鼠标驱动、_LG_MULTI_THREAD_多线程驱动。由于我们现在用到 的是屏幕驱动接口,所以其他没有用到的接口都在 config_basic.h 中把宏定义给 注释掉了。 到此为止 learningGUI 的驱动接口基本填写完毕,其中最主要的就是把画点 函数自己写好并填写到对应的驱动接口中。同时还修改了屏幕分辩率。移植到这 里我们可以试着把编译好的代码下载到板子上,我们发现 RGB 屏幕变成了蓝色, 则说明我们的移植成功了一半。要让它有图像显示我们接着继续往下看。 shaosiming
分享到:
收藏