您的位置:首页 > 产品设计 > UI/UE

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: