您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页移植uC_GUI应用程序时有关LCD配置的研究

移植uC_GUI应用程序时有关LCD配置的研究

来源:测品娱乐
第26卷第4期Vol.26

No.4

计算机工程与设计

ComputerEngineeringandDesign

2005年4月Apr.2005

移植uC/GUI应用程序时有关LCD配置的研究

欣,孟凡荣

(中国矿业大学计算机科学与技术学院,江苏徐州221008)

要:uC/GUI是一个面向嵌入式应用开发的GUI软件,由于它提供目标机模拟器,因此可以在脱离目标系统的情况下,完成应用程序的开发调试过程;而在实现从宿主机到目标机的移植过程中,一个重点工作就是用目标系统中的LCD取代模拟器的LCD窗口,这只要通过修改LCD配置文件和替换部分驱动程序就可以完成;简化了整个开发过程,加快了开发速度。

关键词:LCD配置;嵌入式系统;代码移植中图法分类号:TP303

文献标识码:A

文章编号:1000-7024(2005)04-1006-03

ResearchonLCDconfigurationintransplantationofuC/GUIapplication

GEXin,

MENGFan-rong

(InstituteofComputerScienceandTechnology,ChinaUniversityofMiningandTechnology,Xuzhou221008,China)

Abstract:uC/GUIisaGUIsoftwareforembeddedapplications.DuetothesimulatorwhichuC/GUIprovided,thewholedevelopmentcoursecanbeaccomplishedwithoutthetargetsystem.Andyet,duringtheprocessofrealizingtransplantationfromhostcomputertotargetcomputer,oneofimportantstepsistoreplacesimulator'sLCDWindowsbyrealLCDofthetargetsystem.Toaccomplishthis,itonlyneedstomodifyLCDconfigurationandreplaceseveraldrivers.Ithassimplifiedthewholedevelopmentcourse,andacceleratedthedevelopingspeed.

Keywords:LCDconfiguration;embeddedsystem;codetransplantation

1引言

需要用链接工具将它们链接成另外一个目标文件,可以称其为“可重定位程序”。经过定址工具,将“可重定位程序”变成最终的二进制可执行文件。

整个过程的流程图如图1所示[1]。

源文件代码源文件代码

编译器编译器

目标文件目标文件链接器可重定位程序

在当前数字信息技术和网络技术高速发展的后PC(Post-时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、PC)

军事技术、各类产业和商业文化艺术以及人们的日常生活等方方面面中。

为了让广大的用户乐于接受,后PC时代的数字化产品要求具有强大的网络和多媒体处理能力、易用的界面和丰富的应用功能。因此,现在许多开发人员都在致力于嵌入式GUI的开发和应用,而uC/GUI作为一款面向嵌入式系统的GUI开发软件,以其强大的可移植性和于目标系统的特点,能够让开发工作达到事半功倍的效果。

址器

可执行程序

源文件代码编译器目标文件图1嵌入式系统应用程序编译、链接流程图

嵌入式开发过程中的另一个重要的步骤是调试目标机上的应用程序。嵌入式调试采用交叉调试器,一般采用宿主机-目标机的调试方式[2],它们之间由串行口线或者以太网相连。交叉调试有任务级、源码级和汇编级的调试,调试时需将宿主机上的应用程序和操作系统内核下载到目标机的RAM中或者直接烧录到目标机的ROM中。目标监控器是调试器对目标机上运行的应用程序进行控制的代理(DebuggerAgent),事先被固化在目标机的Flash、在目标机上电后自动启ROM中,动,并等待宿主机方调试器发来的命令,配合调试器完成应用程序的下载、运行和基本的调试功能,将调试信息返回给

2嵌入式应用程序的开发过程

在嵌入式开发过程中有宿主机和目标机的角色之分:宿

主机是执行编译、链接、定址过程的计算机;目标机则是指运行嵌入式软件的硬件平台。

宿主机的主要任务就是把应用程序转换成可以在目标机上运行的二进制代码。这一过程包含3个步骤:编译、链接、定址。编译过程由交叉编译器实现,主要完成将源代码变成目标文件。由于编译过程所产生的目标文件不只一个,所以

收稿日期:2004-06-07。

作者简介:葛欣(1980-),女,江苏徐州人,硕士,研究方向为Linux系统和嵌入式系统中GUI的应用;孟凡荣,女,副教授,博士。

-1006-

宿主机。

可以看出,在实际的开发过程中,即使代码编写没有错误,许多客观因素譬如网络通信是否正常、目标系统运行是否正常等,也会直接影响程序的调试通过。面对这个问题,uC/在GUI为开发者提供了如图2所示的目标机模拟器3。这样,调试应用程序时就可以脱离目标系统,使得调试过程更加具有针对性,加快了开发速度。

[]

(3)设定LCD的尺寸,如LCD_XSIZE,LCD_YSIZE;(4)设定系统中使用的LCD控制器、每个像素点的比特数和色彩模式,即LCD_CONTROLLER,LCD_BITSPERPIXEL,LCD_FIXEDPALETTE;

(5)根据具体的LCD,可能还需要配置所使用的common/即LCD_LUT_COM、segment输出数目,LCD_LUT_SEG;

(6)测试系统;

(7)如果需要交换X/Y的位置,则需要修改宏LCD_RE-并返回到(6)操作;VERSE,

(8)如果需要镜像X/Y的位置,则需要修改宏LCD_MIR-并返回到(6)操作;ROR-X、LCD_MIRROR-Y,

(9)检查其它的配置开关项,根据需要设定适当的值;(10)删除文件中不用的配置项;

3.2修改GUI配置文件

为了确保目标机上的LCD能正常工作,仅仅配置好

在不同的目标系统中,LCDConf.h是不够的;LCD可能由单独的LCD控制器来管理,也可能由CPU来管理而根本没有LCD控制器。而且,根据不同的开发应用,程序有可能需要工作在多任务环境中,或者在多任务状态下能够同步地访问显示器

图2

uC/GUI提供的目标机模拟器

等。对应于这些具体的情况,需要修改GUI配置文件GUIConf.h以及Sample\\GUI_X\\GUI_X.c源文件中与硬件相关的函数。

如表1所示。对GUIConf.h文件中主要是一些配置选项,

它的修改可以采用上述修改LCDConf.h的方法,基本上分为①拷贝一份功能上相似的配置文件;②检查所有的配置3步:

选项并根据具体的硬件情况进行修改;③删除不用的配置选项。

表1GUI配置文件中主要选项参照表

GUI_ALLOC_SIZEGUI_DEBUG_LEVELGUI_DEFAULT_BKCOLORGUI_DEFAULT_COLORGUI_DEFAULT_FONTGUI_MAXTASK

GUI_OS

GUI_SUPPORT_MEMDEVGUI_SUPPORT_TOUCHGUI_SUPPORT_UNICODEGUI_WINSUPPORT

默认值1000…GUI_BLACKGUI_WHITE&GUI_Font6*8

401010

说明

设置可供选择的动态内存大

小(字节)

设定由GUI_X_Log()传递信息

设置默认的背景色设置默认的前景色

设置调用GUI_Init()后所使用的默认字体

当系统支持多任务时uC/GUI可以调用显示任务的最大值当有多个进程调用uC/GUI时使它能够支持多任务可选择是否支持内存设备可选择是否支持触摸屏设备能够支持嵌入在8位字符串中的Unicode字符可选择是否支持窗口管理器

3移植过程中对LCD的配置

虽然利用uC/GUI可以使开发过程在完全脱离目标系统

的情况下进行,但是开发的最终目标仍然是希望应用程序能够稳定地运行在具体的目标机上。因此,这需要在程序开发完毕后对程序代码进行移植。

移植前,首先要确保代码在目标机模拟器上编译通过并运行成功;由于程序中可能使用了许多uC/GUI提供的模块,那么可以利用uC/GUI自带的批处理程序(MakeLib)生成一个库文件Lib,然后直接在Makefile文件实现用户程序和该库文件的编译链接。将程序连同相关的库文件移植过程中,主要的工作就是用目标机取代模拟器,也就是根据具体的情况修改部分配置参数并用具体的硬件设备驱动取代相应的模拟器源文件。其中,作为显示输出结果的设备LCD就成为主要改动的部分。

3.1修改LCD的配置文件

原系统中的模拟器使用的是LCDConf.h头文件,其中主

要是一些保证系统正常运行的配置参数,如LCD宏、LCD控制器宏。用户需要根据自己的目标机选择相应的配置文件来取代LCDConf.h文件。由于uC/GUI本身提供了一些不同型号的LCD配置文件,在文件夹Sample\\LCDConf\\xxx下可以找到,其中xxx代表LCD驱动器的名称,所以用户自己的配置文件可参考成熟的代码编写或通过直接修改得到。具体的步骤如下:

(1)根据LCD控制器的类型在Sample\\LCDConf\\xxx下拷贝一份功能上相似的配置文件,然后在此基础上进行修改来得到自己的配置文件;

(2)通过对一系列的宏设定适当的值来配置总线接口。对于LCD控制器,基本上有两种总线接口:单总线结口和全总线接口。这与具体的硬件有关;

等。

对GUI_X.c源文件的修改主要是改写部分负责初始化硬件的函数,如GUI_X_Init()、GUI_X_GetTime()、GUI_X_Delay()

3.3更换LCD的驱动程序

这些驱动uC/GUI包含了一些不同型号的LCD驱动程序,

程序都对应的支持一系列的LCD控制器。例如,型号为LCDSlin的驱动器就可以支持EpsonSED1330、EpsonSED1335、

-1007-

开发者可以根据所使用ToshibaT6963等型号的LCD控制器。的LCD来选择相应的驱动程序。

具体的情况可以到uC/GUI的网站http://www.Micrium.com上查询。

LCD驱动程序放置在gui\\LCDDriver文件夹下。在使用模拟器时,对应的驱动程序为LCDWin.c和LCDMemC.c。其中LCDWin.c支持单色显示器;LCDMemC.c支持彩色显示器。当用目标机取代模拟器时,需要将LCDWin.c和LCDMemC.c删除,并加入目标系统中LCD的驱动程序。

#defineLCD_LPXCD(0)/*LCD像素时钟分配寄存器*/

#defineLCD_LPICF(0x08)/*LCD接口设置寄存器*/#defineLCD_LPOLCF(0x01)/*LCD极性配置寄存器*/#defineLCD_LCKCON(0x81)/*LCD时钟控制寄存器*//*初始化程序*/

#if!LCD_SWAP_BYTE_ORDER

#defineLCD_WRITE_REGLH(Adr,d0,d1)LCD_WRITE_REG(Adr,((d0)<<8)|(d1))

#else

#defineLCD_WRITE_REGLH(Adr,d0,d1)LCD_WRITE_REG(Adr,((d1)<<8)|(d0))

#endif

#defineLCD_INIT_CONTROLLER()\\

LCD_WRITE_REG(0x05,LCD_LVPW);\\

LCD_WRITE_REGLH(0x08,LCD_LXMAX0,LCD_

LXMAX1);\\

LCD_WRITE_REGLH(0x0a,LCD_LYMAX0,LCD_LY-MAX1);\\

LCD_WRITE_REG(0x29,LCD_LBAR);\\LCD_WRITE_REG(0x25,LCD_LPXCD);\\LCD_WRITE_REG(0x20,LCD_LPICF);\\LCD_WRITE_REG(0x21,LCD_LPOLCF);\\LCD_WRITE_REG(0x27,LCD_LCKCON)

以上只是配置文件中的部分代码,根据具体的情况还应对相应的选项进行配置和删减。

4修改LCDConf.h的实例

下面结合具体的例子来简单地看一下,在移植过程中如

何对LCD配置文件进行修改。笔者采用的目标系统是华恒公司的HHDREZ328—R2开发套件,其中CPU是Motorola公司龙珠系列中的MC68EZ328;LCD控制器是内置在EZ328中的,它支持通用LCD液晶显示屏,对只有黑白两色的最大支持的点阵大小为:对于灰度显示的最大点阵大小为:0×512,320×240。LCD数据线可为4位,2位和1位。

通过查阅华恒公司的开发手册和MC68EZ328的用户手册,可以知道该目标系统的基本配置参数,由此对LCDConf.h文件进行如下的改动:

#defineLCD_XSIZE

(320)

/*LCD的X轴分辨率*/

(240)#defineLCD_YSIZE/*LCD的Y轴分辨率*/

#defineLCD_BITSPERPIXEL(2)/*每个像素点的比特数*/

由于EZ328中的LCD控制器是通过周期性的DMA传送来为外部的LCD驱动器提供数据的,因此,在DMA托管总线后,对应的配置如下:LCD控制器使用的是全总线模式,

/*全总线配置*/

#defineLCD_READ_MEM(Off)

((U32)(Off))))+((U32)(Off))))=data

#defineLCD_READ_REG(Off)*((volatileU16*)(0xfffffa00+((U16)(Off)))

#defineLCD_WRITE_REG(Off,data)(0xfffffa00+((U16)(Off))))=data

/*定义寄存器的内容*/#defineLCD_LVPW(0x28)/*LCD虚拟页面宽度寄存器*/#defineLCD_LXMAX0(0x02)/*LCD屏幕宽度寄存器*/#defineLCD_LXMAX1(0x80)#defineLCD_LYMAX0(0x01)/*LCD屏幕高度寄存器*/#defineLCD_LYMAX1(0xdf)#defineLCD_LBAR(0)/*LCD刷新率调整寄存器*/

*((volatileU16*)*((U16*)(0xfffff000+

5结束语

通过参加项目开发可以体会到:嵌入式系统开发和单PC

机上的开发工作实质上并无区别,惟一改变的是每个目标系统都是独特的,这个不同点导致了许多附加的开发复杂性;而简化了开uC/GUI最大程度地屏蔽了这些硬件平台的特殊性,发过程,减轻了开发人员的负担。

相信只要遵循嵌入式系统的开发规律,适应市场的需求,就一定能创造出越来越多的嵌产品;而以GUI屏幕为中心的多媒体界面增加了嵌入式产品与使用者之间的亲和力,这将使它们逐渐得到亿万用户的青睐。

#defineLCD_WRITE_MEM(Off,data)*((U16*)(0xfffff000

参考文献:

[1][2][3][4][5][6][7]

邹思轶.嵌入式Linux设计与应用[M].北京:清华大学出版社,2002.114-115.

嵌入式系统研发社[EB/OL].http://www.embyte.com/.uC/GUI[EB/OL].http://www.Micrium.com.

uc-gui_user[EB/OL].http://half.nease.net/ucos/article.赛迪网[EB/OL].http://www0.ccidnet.com/tech.

MC68EZ328UM.pdf[EB/OL].http://www.motorola.com.GNU[EB/OL].http://www.gnu.org/.

-1008-

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务