uC/GUI 在Cortex-M3 内核上的移植


屈环宇--嘉兴学院
一、简介
是一种专为嵌入式系统设计的图形界面支持系统。它的代码全部由标准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 号晚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始破解WEP、WPA无线网络

以前出差时在机场用过无线网络,小区内是否也有无线网络呢?随便一搜,果然有几个无线网络信号,于是打起了免费蹭网的主意,但信号最好的几个网络的WEP或WPA密码成为了一个门坎,于是在公司上网查到相关资料&…

python读取栅格gdal库下载链接

gdal下载链接 安装 再下载后的文件所在文件下的路径 在此输入cmd

python中回车怎么表示_如何在python中使用读取行仅拆分回车符?

I have a text file that contains both \n and \r\n end-of-line markers. I want to split only on \r\n, but cant figure out a way to do this with pythons readlines method. Is there a simple workaround for this?解决方案As eskaev mentions, youll usually want t…

STM32移植UCGUI3.90笔记

在MDK环境下,终于将3.90版本的UCGUI移植到STM32下了,在网上看到的都是例程代码,很少看到有关于在STM32下移植UCGUI的教程方法,为了方便大家,特写此移植方法,大家可以借鉴(有错误之处&#xff0c…

get与post的区别与联系

这里来说说get与post的区别与联系: 区别与联系: 1、get是从服务器上获取数据,post则是向服务器传送数据; 2、get将表单中数据的按照variablevalue的 形式,添加到action所指向的URL后面,并且两者使用“?”连…

net能和python结合吗_如何不用安装python就能在.NET里调用Python库

前言Pythonnet这个屌爆的项目的出现,使得我们可以用一种新的方式,让C#可以和Python之间进行互操作。但是它的设置和部署可能有点问题,真的是这样吗?本文我会介绍Python.Included这个项目,它不但优雅的解决了这个问题&a…

spectral安装

Spectral Python (SPy) 是一个纯 Python 模块,用于处理高光谱图像数据。它具有读取、显示、操作和分类高光谱图像的功能。 SPy 需要 Python 并依赖于其他几个免费提供的 Python 模块。在安装 SPy 之前,您应该确保满足其依赖项。虽然您可以仅使用 Python…

打工是最愚蠢的投资——李嘉诚在深圳大梅沙演讲

打工是最愚蠢的投资——李嘉诚在深圳大梅沙演讲 很多人会认为打工并不是投资, 强烈反对这种观念。 其实打工才是最大 最愚蠢的投资。 人生最宝贵的是什么?除了我们的青春还有什么更宝 贵?很多人都抱怨我穷,我没钱想做生意又找不到…

windows远程桌面端口修改

远程桌面服务所使用的通信协议是Microsoft定义RDP(Reliable Data Protocol)协议,RDP协议的TCP通信端口号是3389。为了安全起见,我们常需要更改其端口。 运行注册表编辑器,找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal …

python将字典作为参数传入函数

示例 max_d {"scholl":123} print(*max_d) print(**max_d) 运行结果 scholl Traceback (most recent call last):File "D:/pythonProject1/test.py", line 3, in <module>print(**max_d) TypeError: scholl is an invalid keyword argument for …

wxpython图形_wxPython(Python的GUI图形库)v3.0.2.0免费版-独木成林

wxPython(Python的GUI图形库) v3.0.2.0免费版wxPython2.8-win32-ansi-py27 对应于32位 python 2.7版本.简单例子:#!/usr/bin/env pythonimport wxapp wx.App(False) # Create a new app, dont redirect stdout/stderr to a window.frame wx.Frame(None, wx.ID_ANY, "He…

epoll或者kqueue的原理是什么?

首先我们来定义流的概念&#xff0c;一个流可以是文件&#xff0c;socket&#xff0c;pipe等等可以进行I/O操作的内核对象。 不管是文件&#xff0c;还是套接字&#xff0c;还是管道&#xff0c;我们都可以把他们看作流。 之后我们来讨论I/O的操作&#xff0c;通过read&#xf…

SaaS窘境[欣赏然后翻译之]

Piaoger按&#xff1a; 还是SaaS窘境&#xff0c;只不过这次是翻译了一篇不错的英文Blog&#xff0c;翻译的过程很苦&#xff0c;有些地方至今也还觉得生涩&#xff0c;慢慢改吧。 不过怎么说&#xff0c;收获良多&#xff0c;无论是SaaS&#xff0c;还是Disruptive Innovation…

解决IDL检索COM类工厂中CLSID为{ }组件注册失败

作者用的envi版本为5.3 在第一次利用C#对IDL进行二次开发出现组件注册失败 解决方法&#xff1a; 亲测有效 以管理员的身份运行命令提示符 然后在文本框内输入即可解决 C:\Windows\System32\regsvr32.exe "D:\Program Files\Exelis\IDL85\resource\bridges\export\CO…

win7上安装wince6.0

先在 Win 7 上装 WinCE 6.0会出现如下问题&#xff1a; 1、ToolsMsmCA(Error): Setup package issue or CoreCon DataStore corrupted: CDeviceSDKInstallShim Add/Remove failed. HR0x8007005。 2、ToolsMsmCA(Error): Setup package issue or CoreCon DataStore corrupted…

(转载)DevExpress ASPxGridView 使用文档六:模板

转载请注明出处&#xff1a;http://surfsky.cnblogs.com/ ----------------------------------------------------------- ASPxGridView 模板---------------------------------------------------------ASPxGridView 提供以下几种自定义的模板视图 EditForm 编辑窗口。弹…

arcgis缓冲后在envi中聚类出错

问题&#xff1a; arcgis将某一矢量缓冲后&#xff0c;将非研究区的nodata值改为-9999&#xff0c;后在envi中聚类&#xff0c;发现只分成两类&#xff0c;研究区和非研究区 解决 将-9999改为nodata值这样非研究区就不会参与计算

python博客下载本地文件_解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了...

1.今天网上下载一个博客项目&#xff0c;发现本地访问,js,css加载不了.我想应该是项目上线的安全措施,但是我想调试项目.找到方法如下在settings.py里面编辑添加STATICFILES_DIRS (os.path.join(BASE_DIR, static),)另外把STATIC_ROOT os.path.join(BASE_DIR, static)改为STA…

centos smb配置与win7共享

1. 安装samba yum -y install samba 2. 修改samba配置文件 vi /etc/samba/smb.conf 增加一下内容&#xff1a; [global]        workgroup WORKGROUP        server string file Server        security share [share] …

Ubuntu开机自动启动script(2)

1.安装apt install chkconfig 2.用root帐号登录&#xff0c;vi /etc/rc.d/init.d/mystart&#xff0c;追加如下内容&#xff1a; #! /bin/shecho "hello start up script!" > /home/liaoyong/mystart.txtexit 0这个脚本的作用只是在我的家目录里建立一个文本文件&…