SSD1306上移植uc/gui(efm32)
2014-06-24 10:11
169 查看
移植uc/gui当然得知道uc/gui是什么东东了,对于程序猿来说就是一堆函数了。通过调用这些函数可以很方便的在你的显示屏上显示各种操作界面,图形,文字等。
其实向这种不管是系统的移植还是uc/gui这种函数库的移植,要有一个概念,那就是“我的”和“你的”怎么连接起来。即uc/gui会留出一个接口来衔接你自己具体的东西,有的是软件与硬件的接口,有的是函数与函数的接口。只要有这个概念,对于移植就很简单了,因为大的方向有了。
下面是移植步骤
一:下载源码
之前我在micrium官网上找了很久(官网上的东西毕竟还是可靠点),下了很多示例工程,打开一看什么都有就是没源码,后来才知道,uc/gui是非开源的,听说一套下来6W多。不过网上还是有的下。。。哈哈。。。这是网上下载下来解压之后的文件,官网上下个工程也是这种目录结构,不过源码文件夹里是empty。
二:建立自己开发环境的一个工程,然后添加uc/gui文件啦。Uc/gui组下就是与uc/gui有关的文件了,当然,整个源码不止这些,这可以根据你实际的项目来添加。像这些在移植初期就不要加了。不熟又不用的东西,加了显得乱。况且编译超花时间。这些文件没有添加到工程中,所以稍后在配置文件中要把这些功能给关掉。
工程目录:
三:与硬件相关的文件。
1、LCDConfig
这里是你显示屏幕的参数,X水平分辨率,Y垂直分辨率分辨率,屏幕的位深度。至于至于这个LCD_CONTROLLER你可以随便写,只要与LCDDriver里文件一致就行。
2、下面就到了LCDDriver文件夹了
1)可以看到三个文件,其实每个文件夹功能是一样的,至于到底会用到哪个文件,就取决于你的LCD_CONTROLLER.
每个文件里都有这样一个条件编译,只有LCD_CONTROLLER参数一致,文件才会编译。
2)底层函数,我这里以LCDDummy.c为例
要有以下几个函数:
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);填充一个像素
unsigned int LCD_L0_GetPixelIndex(int x, int y); 读取一个像素的颜色
void LCD_On (void); LCD_ON
void LCD_Off (void); LCD_OFF
int LCD_L0_Init(void) ; LCD初始化函数
这写函数里都要放好自己写的LCD底层驱动。所以这是应该把自己底层函数的h文件包括进来。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);
四:与软件相关的文件
GUIConfi.h
这就是配置uc/gui了,剪裁其功能。用到什么就1,不用就0它。
至此,移植工作完成。
五.下载编译
出现了---error: #134: expected a field name 具体原因网上有文章。
原因是我的EFM32芯片中有一个LCD定义和uc/gui一致,因为EFM32内的LCD控制器压根没用,我就把它注释掉了,成功。
六:
之前的移植移植写不了字符,除了画横线正常之外,其余都有问题。百思不得其解。之后一步一步调试,后来发现问题出在这个底层函数里啦。因为我用的OLED是单色的,我就以为PixelIndex是个无用参数。就没用到,其实在单色显示屏上,PixelIndex代表的就是打开和关闭一个像素点,修改后就ok了。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);填充一个像素
还有一点,因为我用的这个芯片,网上很多的,他的硬件连接时没有读取功能,所以每次填充一个像素,实际上是以8个像素点为单位的。所以我开辟了一个buff[128][64]的nei存来存储像素信息,最后一次性写入OLED的缓存。
此次移植是uc/os + uc/osii
其实向这种不管是系统的移植还是uc/gui这种函数库的移植,要有一个概念,那就是“我的”和“你的”怎么连接起来。即uc/gui会留出一个接口来衔接你自己具体的东西,有的是软件与硬件的接口,有的是函数与函数的接口。只要有这个概念,对于移植就很简单了,因为大的方向有了。
下面是移植步骤
一:下载源码
之前我在micrium官网上找了很久(官网上的东西毕竟还是可靠点),下了很多示例工程,打开一看什么都有就是没源码,后来才知道,uc/gui是非开源的,听说一套下来6W多。不过网上还是有的下。。。哈哈。。。这是网上下载下来解压之后的文件,官网上下个工程也是这种目录结构,不过源码文件夹里是empty。
二:建立自己开发环境的一个工程,然后添加uc/gui文件啦。Uc/gui组下就是与uc/gui有关的文件了,当然,整个源码不止这些,这可以根据你实际的项目来添加。像这些在移植初期就不要加了。不熟又不用的东西,加了显得乱。况且编译超花时间。这些文件没有添加到工程中,所以稍后在配置文件中要把这些功能给关掉。
工程目录:
三:与硬件相关的文件。
1、LCDConfig
这里是你显示屏幕的参数,X水平分辨率,Y垂直分辨率分辨率,屏幕的位深度。至于至于这个LCD_CONTROLLER你可以随便写,只要与LCDDriver里文件一致就行。
2、下面就到了LCDDriver文件夹了
1)可以看到三个文件,其实每个文件夹功能是一样的,至于到底会用到哪个文件,就取决于你的LCD_CONTROLLER.
每个文件里都有这样一个条件编译,只有LCD_CONTROLLER参数一致,文件才会编译。
2)底层函数,我这里以LCDDummy.c为例
要有以下几个函数:
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);填充一个像素
unsigned int LCD_L0_GetPixelIndex(int x, int y); 读取一个像素的颜色
void LCD_On (void); LCD_ON
void LCD_Off (void); LCD_OFF
int LCD_L0_Init(void) ; LCD初始化函数
这写函数里都要放好自己写的LCD底层驱动。所以这是应该把自己底层函数的h文件包括进来。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);
四:与软件相关的文件
GUIConfi.h
这就是配置uc/gui了,剪裁其功能。用到什么就1,不用就0它。
至此,移植工作完成。
五.下载编译
出现了---error: #134: expected a field name 具体原因网上有文章。
原因是我的EFM32芯片中有一个LCD定义和uc/gui一致,因为EFM32内的LCD控制器压根没用,我就把它注释掉了,成功。
六:
之前的移植移植写不了字符,除了画横线正常之外,其余都有问题。百思不得其解。之后一步一步调试,后来发现问题出在这个底层函数里啦。因为我用的OLED是单色的,我就以为PixelIndex是个无用参数。就没用到,其实在单色显示屏上,PixelIndex代表的就是打开和关闭一个像素点,修改后就ok了。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex);填充一个像素
还有一点,因为我用的这个芯片,网上很多的,他的硬件连接时没有读取功能,所以每次填充一个像素,实际上是以8个像素点为单位的。所以我开辟了一个buff[128][64]的nei存来存储像素信息,最后一次性写入OLED的缓存。
此次移植是uc/os + uc/osii
相关文章推荐
- uC/GUI移植笔记 (详细)
- 初学者EFM32上移植uC/OSII
- 把uc/gui移植到了mini2440
- 嵌入式图形用户界面uc/gui在nios II上的移植
- 嵌入式图形用户界面uc/gui在nios II上的移植
- [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画
- 基于AT91SAM7 MCU的UC/GUI的移植
- uC/GUI 在Cortex-M3 内核上的移植
- UC/GUI 移植 STM32F103VE
- STM32F103RBT的TFT---UC_GUI简单移植
- 2012-04-08 06:43 UC/GUI移植 总结之回调函数
- UC/GUI移植 总结之回调函数
- 初学者EFM32上移植uC/OSII
- STM32+uCOS-II+uc/GUI移植 (uC/GUI API函数学习一)
- UC/GUI 在 STM32F103VE上的移植过程
- uc/so-II移植到atmega128
- ZLGGUI 在《iBoard 电子学堂》上的移植
- Linux帧缓冲设备驱动程序框架及图形界面GUI的移植
- [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
- [转帖] uC/GUI3.32应用笔记