旅游网站建设的经济评价,大气简洁网站,锐酷网站建设教程,石家庄网站建设吧屈环宇--嘉兴学院一、简介是一种专为嵌入式系统设计的图形界面支持系统。它的代码全部由标准C编写#xff0c;模块化的设计#xff0c;具有很强的可移植性。uC/GUI 适应大多数的黑白或彩色LCD 的应用#xff0c;还提供一个可扩展的2D 图形库及占用极少RAM 的窗口管理体系。二… 屈环宇--嘉兴学院一、简介是一种专为嵌入式系统设计的图形界面支持系统。它的代码全部由标准C编写模块化的设计具有很强的可移植性。uC/GUI 适应大多数的黑白或彩色LCD 的应用还提供一个可扩展的2D 图形库及占用极少RAM 的窗口管理体系。二、要求目标系统(硬件)你的目标系统必须具备如下几点[1].CPU(8/16/32/64 位)[2].必要的RAM 和ROM 存储[3].LCD 显示器(任何类型及分辩率的)对于内存的需求取决于你选用的UCGUI 的功能模块以及你所使用的目标系统上的编译器的效率。内存的占用量无法估计准确的值 下面就一些的数值适用于多数的目标系统。小型系统(不含窗口管理功能)[1].RAM:100 字节[2].堆栈:500 字节[3].ROM:10~25K(取决于选用的UCGUI 功能模块)大型系统(包含窗口管理及各种窗体控件功能)[1].RAM: 2-6 kb (决于选用的应用中建立窗口的数量)[2].堆栈: 1200 bytes[3].ROM: 30-60 kb (决于选用的UCGUI 功能模块)还要注意ROM 的需求量随着你在应用程序中使用的字体数目而增长,以上的所有值都是粗糙的估计,并不准确。三、移植前的概述本次选用的目标系统是基于cortex-M3 内核的stm32f103rb 微处理器。选用的是uC/GUI3.90a 版本。LCD 是ILI93XX 控制的TFT 彩色液晶显示屏。打开UCGUI390a\GUI以下列出各个文件夹的作用表格uc/GUI 目录结构Config 配置文件目录GUI\AntiAlias 搞锯齿支持GUI\ConvertMono 灰度色彩转换支持GUI\ConvertColor 色彩转换支持GUI\Core 核心文件GUI\Font 字体文件GUI\JPEG JPEG 格式图像显示支持GUI\LCDDriver LCD 驱动文件GUI\MemDev 存储设备支持GUI\MultiLayer 多层画图支持GUI\Widget 构件库GUI\WM 窗口管理器其中AntiAlias、ConvertMono、ConvertColor、MemDev、Widget、WM均是可选的配置组件。μc/GUI 提供一些配置选项可在编译时排除某些组件但是有时候需要手动将C 文件从工程文件中移除以避免编译文件。最接近用户使用的组件为构件库、窗口管理器、LCD 驱动以及字体文件。四、uC/GUI 接口函数的设计移植uC/GUI 的前提是LCD 的驱动函数已经设计完成因为在嵌入式体系结构中uC/GUI 所在的是操作系统层其与硬件的交互是通过设备驱动层来实现的。uC/GUI 与设备驱动层的接口是以下3个函数Void LCD_DrawPoint(u16 x, u16 y, u16 color);U16 LCD_ReadPoint(u16 x,u16 y);Void LCD_MyInit();注意LCD 的初始化函数名不能用LCD_Init(); uC/GUI 中已有如此定义的函数会导致重定义。接口函数的设计是跟处理器和LCD 相关的,在移植uC/GUI 前必须完成以上3 个函数的设计 即能用LCD_MyInit() 实现LCD 的初始化LCD_ReadPoint(u16 x,u16 y)返回对应点的颜色LCD_DrawPoint(u16 x,u16 y, u16 color)在LCD 上显示对应点的颜色。五、uC/GUI 的移植将uGUI 文件夹中的所有文件都加入到工程如图所示Startup 文件夹中包含处理器的启动文件及内核文件FWLib 文件夹中包含固件库文件User 文件夹中包含主函数文件及相关的用户定义的文件细心的朋友会发现多了一个uGUI/Config 文件夹。这个就是uC/GUI 相关的配置文件。其中包含了以下3 个文件GUI_X.c UCGUI390a\Sample\GUI_X由于uC/GUI 提供了与uC/OS 相应的接口函数仅移植uC/GUI 会因为有些函数是不存在而导致编译错误GUI_X.c 的作用就是申明这些函数防止编译错误。U32 GUI_X_GetTaskId(void){return 0;}void GUI_X_Lock(void){;}void GUI_X_Unlock(void){;}void GUI_X_InitOS (void){;}void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }在GUI_X.c 中加入这些函数的申明防止编译错误GUIConf.h UCGUI390a\Start\Config此文件用于uC/GUI 的相关应用配置介绍如下#ifndef GUICONF_H#define GUICONF_H#define GUI_OS (0) //不支持操作系统#define GUI_SUPPORT_TOUCH (0) //不支持触摸屏#define GUI_SUPPORT_UNICODE (1) //支持ASCII 编码#define GUI_DEFAULT_FONT GUI_Font6x8 //字体大小#define GUI_ALLOC_SIZE 5000 //提供给窗口管理的内存大小#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 */LCDConf.h UCGUI390a\Start\Config此文件用于LCD 的相关应用配置介绍如下#ifndef LCDCONF_H#define LCDCONF_H#define LCD_XSIZE (240)#define LCD_YSIZE (320)#define LCD_CONTROLLER (9320) //控制器编号#define LCD_BITSPERPIXEL (16) //16 位点显示格式#define LCD_FIXEDPALETTE (565) //对应红绿蓝为565 位#define LCD_SWAP_RB (1)#define LCD_INIT_CONTROLLER() LCD_Init();#endif /* LCDCONF_H */接下来就是函数接口的匹配了打开GUI\LCDDriver 中的LCDDummy.c 文件。将其中的LCD_L0_Init 函数定义如下int LCD_L0_Init(void){LCD_MyInit();return 0;}将其中的LCD_L0_SetPixelIndex 函数定义如下void (int x, int y, int PixelIndex){LCD_DrawPoint(x,y,PixelIndex);}将其中的LCD_L0_GetPixelIndex 函数定义如下unsigned int LCD_L0_GetPixelIndex(int x, int y){return LCD_ReadPoint(x,y);}至此uC/GUI 移植完毕。如上图所示执行程序后在LCD 的(50,50)处将显示Hello World即表示uC/GUI 移植移植成功。六、总结uC/GUI 的移植不需要对Cortex-M3 内核及其中断机制有所了解也不会涉及到硬件底层需要汇编实现的部分。难点在于设备驱动函数的编写及GUI_X.c中与uC/OS 的接口设计。这是今年暑假移植的刚刚翻译完uC/OS-III 用户手册并移植了uC/OS-III 到stm32 处理器上我就想把uC/GUI 也放到网上去希望能帮到大家。——屈环宇——2011 年11 月6 号晚