Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1013634
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2010-02-07 23:05:19

uC/GUI移植之准备工作。

先来看看吧uC/GUI移植到NIOS II都要准备些什么东西。
首先就是要了解uC/GUI的源代码包括了一些什么东西。
前面提到了这个
有两个文件夹一个GUI存放gui的核心文件,一个config为gui提供配置信息。
先看core里面有什么东西。

GUI\AntiAlias 抗锯齿支持,看上去挺牛的。

根据对抗锯齿的使用发现,uC/GUI的抗锯齿的效果好坏主要取决于系统的发色数,即系统的色彩表现能力,例如系统仅有灰度显示能力的时候,uC/GUI在对一条直线进行处理的时候它是在直线的两侧添加颜色较浅的点来实现抗锯齿的。效果十分明显。
GUI\ConvertMono (b/w)和灰度显示的色彩转换支持。
GUI\ConvertColor 彩色显示的色彩转换支持
实际上就是色彩空间变换,为什么需要色彩转换呢?
在gui内部定义了一套调色板及色彩的数据格式,但是有的控制器的色彩数据格式和gui内部定义的并不一样,甚至色彩的数量(即lcd的发色数)也不同,这样就需要将两种不同的数据格式进行转换。这样才能在lcd上看到正常的颜色。
GUI\Core µC/GUI 核心文件,提供了GUI基本的功能,比如画点,画线,为图之类的东西。什么窗口,窗口控件都是基于这些基本功能的。
GUI\Font 不用多说了
GUI\LCDDriver LCD控制器。下面会说这个东西。
GUI\MemDev Memory device 支持。这个东西可用在很多情况下,但最主要的功能是防止在项目重叠时,防止屏幕的闪烁。如果没有Memory device 的支持数据会直接写到控制器中去,这样当进行各种屏幕跟新的时候就会出现闪烁现象。如果有Memory device 支持,就会避免这种现象。具体的还没有测试,不过看说明是蛮牛的。关于这个东西会有一个较详细的测试。
GUI\Touch Touch-panel 支持。虽然说是支持,甚至连鼠标都支持,但是底层驱动程序的四个函数是空的需要用户自己添加内容,我们使用mxb7843这个四线电阻触摸屏控制器。班子还没有做好,做好就测试。
GUI\Widget 窗体控件库,功能强大,提供诸如按钮,文本框之类的复杂的功能。
GUI\WM 窗口库。
widget wm配合memory device使用功能强大。

下面看看CONFIG文件夹
三个文件:
GUIConf.h
GUITouchConf.h
LCDConf.h
看名字也知道干什么的了。
下面一个一个说。

#ifndef GUICONF_H
#define GUICONF_H

#define GUI_OS                    (1)  /* 多任务支持,如果使用rtos就打开这个选项,除了自家的ucos,别的rtos也支持*/
#define GUI_SUPPORT_TOUCH         (1)  /* 支持触摸屏*/
#define GUI_SUPPORT_UNICODE       (1)  /*unicode字符串支持,能显示中文的哦,只要能把字库放进来,现在的问题我把字库放不进来,文件太大了,编译器限制,郁闷!*/

#define GUI_DEFAULT_FONT          &GUI_Font6x8/*默认字体*/
#define GUI_ALLOC_SIZE            12500  /* WM 和 memory devices分配的动态内存*/

/*********************************************************************
*
*         Configuration of available packages
*/

#define GUI_WINSUPPORT            1  /* Window manager package available */
#define GUI_SUPPORT_MEMDEV        1  /* Memory devices available */
#define GUI_SUPPORT_AA            1  /* Anti aliasing available */
这三个不用说了吧!
#endif  /* Avoid multiple inclusion */

GUITouchConf.h这个文件........由于硬件不到位没有深入研究触摸这块还不太理解,日后补上。


LCDConf.h这个文件比较特别,随着控制器的不同,内容而不同。
如果针对的是硬件控制器,就会在这个文件里面定义控制器的基地址,所有的寄存器,显示内存的地址镜像关系,等等一系列硬件控制器的特征信息。当然了还会定义lcd的尺寸,调色板,等一些重要的信息。还有救治针对不同的lcd的设置,配置不同的控制器初始化代码。
还有一种就是MEM控制器。就是没有硬件控制器在内存里面申请一个和LCD物理象素点一一对应的内存区域作为显示缓冲区,然后由用户想办法把数据送到LCD上去。他给的例子里面是用定时中断来模拟LCD控制的控制时序,将数据流送到LCD上。在该模式下如果是一个很小lcd该方法很好节省了硬件成本。但是大量占用CPU刷新率低。如果lcd象素很高,那就是个问题了。但是在某些应用中不得不使用这种方式。在我的工程里面就使用了这种方式。
我的屏640*480*3bit。
这里有关硬件的控制器是一个大问题,即底层的驱动程序怎么办?uC/GUI提供了很多的芯片的驱动程序,但是如果选用的芯片没有怎么办?或者屏的参数比较奇怪怎么办?比如我用的屏640*480*3bit,就是8色的那种,一般的屏都是16色。我打算在过年的时候开一个有关驱动程序的专题,讨论这些问题。还有驱动程序的效率对整个gui的效率影响很大。
准备就这么多该说说移植了。

阅读(578) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~