盘盘-emwin实战指南霸道_第1页
盘盘-emwin实战指南霸道_第2页
盘盘-emwin实战指南霸道_第3页
盘盘-emwin实战指南霸道_第4页
盘盘-emwin实战指南霸道_第5页
免费预览已结束,剩余26页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前第一部分:emWin简介第1emWin是什么emWin简而言之,emWin(embedwin的缩写)Segger公司针对嵌入式平台开发的图形软件库,通过调用emWin提供的函数接口,开发嵌入式图形界面应用变得简单而快捷。而图形软件库究竟是什么呢?就是一些与图形界面相关的函数,它提供接口给用户调LD显示一个圆,需要用户自行根据驱动编写画圆的函数,而使用图形界面软件库的话,这个画圆函数已经由该软件库提供给用户,用户只需要调用这个函数,设置圆的半径、圆心、颜色就可以画出自己想要的圆,emWinucGUI、STemWin的区别及uC/OS系统的名气,大家比较熟悉的嵌入式图形软件库uC/GUIuC/GUISeggerMicrium公司(uC/OS的公司)定制的图形软件库,说是定制,但其实它跟emWin的区别并不大,以致于本人并不知道它们在功能上究竟差别在何处。比较确定的是旧版本uC/GUI在网上还可以找到开源的代码,而当前新版本的emWin及uC/GUI只对用户提供了库文件,是不开源的。另外,Segger公司还向ST公司出售了emWin的,从而ST公司也得到了定制版的emWin,然后改了名字叫STemWin。当用户在STM32上使用emWin软件库时,是不需要向emWin或ST公司的。总而言之,uC/GUISTemWinSeggeremWin产品,而且它们的版本编号是统一的,如uC/GUI目前版本命名为uC-GUIV5.24,STemWin版本命名为STemWinLibraryV5.24,emWin版本则为emWinV5.24,所以,要比较这三个软件库选择。由于我们使用的是STM32开发平台,自然我们选择的是STemWin。因为如果我们emWinuC/GUISTM32SeggerMicrium公司STemWinSTemWin码所运行的平台,若是STM32,则运行正常,若非STM32,就不能正常使用了。在本后续的讲解中,无特殊说明,不再区分emWin和STemWin。emWin的应用场作出类似windows系统的控制界面了。emWin的这些功能,就是为了解决人机交互应用的设计难题。而它对ROM和RAM的消耗相对来说并不高。据统计,它们提供的一个基本例程(移植了emWin函数库,显示“oWorld”),消耗ROM60KB,RAM7KB,这在当前大多数嵌入式平台都是可以接受的。又因为emWin可以在多任务系统及机的平台上运行,尤其适合嵌入式乱七八emWinemWin制作出来的效果,见图3-4。1-1emWin第2emWin的获.cn/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259225?ssearchtype=partnumber#另外,在我们安装的MDK 下其实也有提供emWin的文件,有的。 可以找到:..\keil\ARM\Segger\emWin。emWin解压得的STemWin文件后,进入到这个 stemwin\STemWin_Library_V1.1.1\Libraries\STemWinLibrary522见图2-1。Config文件夹:其中的GUIConf.c文件用于配置emWin的空间分配GUIConf.h文件用于裁剪emWin的功能。其余的GUIDRV_Template.cLCDConf_FlexColor_Template.c、LCDConf_Lin_Template.cemWin应用在不同 ation文件夹:它包含了《STemWin5.pdfemWin库的用emWinemWin的函数接口时,唯一inc文件夹:它包含了全部的emWin库的头文件,各种关于库函数的、LibemWinCortex-M0、M3M4这些不CPUGCC、MDKIAR这些不同编译环境,都有一个相对应的emWin库,在使用的时候我们要根据自己的平台选择合适的库文件;OS文件夹:它包含了GUI_X.c及GUI_X_FreeRTOS.c文件,分别是对应机平GUIemWin所需要的SoftwareBmpCvt.exe、GUIBuilder.exeFontCvt_V522.exe这三个软件工具。BmpCvt.exe用于把数据转换成C文件,GUIBuilder.exe是一个使用图形界面方式开发emWin应用的工具(有点像Qt的图形开发方式),而FontCvt_V522.exe则用于字体文件转换;emWin应用的软件架型(LIN类型 型硬件层问;emWin软件库承上启下,它运行在硬件层之上,与硬件层之间仅靠液晶驱动连接起来,而向应用层则提供了各种便于用户制作GUI应用的接口。在没有使用emWin的软件架构中,很可能就是由硬件层直接过渡到应用层,甚至BSP层的中间件,就可以正常使用emWin了,迁移应用到不同的平台也简单得多。第二部分:emWinwindows上的为了方便用户学习emWin,Segger设计了一个个相互独立的emWin应用小例子,一步步引导用户由浅入深熟悉各种emWin函数接口。当用户熟悉了emWin之后,还可以windowsemWin的情况下,为移植它到嵌入式环境而烦恼。而且在验证开发的时候直接在windows上仿真,可以大大减第3emWinwindows仿真环仿真版本emWin文件介 是emWin的5.22版本,本中我们就以这个版本为例子讲解。3-1emWinemWin仿真版本的工程在windows上是使用visualc++作为编译器的,而现在作者受,所以在本中野火使用VS2013( visualstudio2013)作为开发环境进行,请读者自行安装VS2013开发环境。VS2013emWin仿真版本压缩包,注意解压后的文件路径不要出现中文,否则打开仿真工程。安装了VS2013集成环境后,打开emWin仿真版本的,找到“SimulationTrial.sln”文件,双击打开,打开后会弹出一个框提示VC++版本问题的,直接选择“是”即可,见图3-2;开始编译工程。可以直接按快捷键“5”,或者点击编译器中的调试按钮,编译并运行工程,编译器会弹出一个提示框,我们在该框打上勾,并选择“是”,让它以后都不用再提示我们选择生成新项目。接下来就开始了编译过程,正常的话都会编译eWn3-3。3-3仿真运浏览演示例程。按照我们以上的步骤,默认编译的是emWin的演示例程,它emWinGUI效果,跟嵌入式平台相比,受液晶屏及CPU运行速度的影响,一般其效果会好一些,读者可亲自品味一下,部分仿真效果图见图3-4。3-4emWin第4emWin仿真工emWin仿真工程概现在我们来看看emWin仿真工程里的文件,它主要包含了Application、Config、GUI、 及一些外部依赖项文件,见图4-1。Application文件Application文件夹是演示例程的应用文件包。在上一个章节中,我们编译的文件都是在这个Application 下的,它包含了演示例程的应用文件,展开Application 一定emWin基础的用户)。文件列表见图4-2。 Config文件Config文件夹是显示配置文件包。在Config文件夹下,有GUIConf.c、GUIConf.h、LCDConfig.c、LCDConfig.h及SIMConfig.c文件,其中前三个文件在实际的嵌入式平台是非常重要的,它们分别起到了分配空间、裁剪emWin功能模块和LCD底层驱动实现。LCDConfig.h文件没有内容,SIMConfig.cVS2013仿真环境需求的一些特定设置,在此我们不作探讨。关于GUIConf.c、GUIConf.h与LCDConfig.c文件的内容见代码代码4-1GUIConf.c文件内1#include23* *//Definetheavailablenumberofbytesavailableforthe#defineGUI_NUMBYTES//Definetheaverageblock#defineGUI_BLOCKSIZE18* Public** ** Calledduringtheinitializationprocessinordertosetup availablememoryforthevoid{//32bitalignedmemorystaticU32aMemory[GUI_NUMBYTES///AssignmemorytoGUI_ALLOC_AssignMemory(aMemory,4345/***************************EndoffileGUIConf.cGUI_X_Config函数,在这个函数中向系统申请了一个4MB(0x400000)aMemoryemWinGUI_ALLOC_AssignMemory把这个空间分配给emWin,并使用库函数GUI_ALLOC_SetAvBlockSize设置块的平均大小。所以emWin的库函数使用的空aMemoryemWin库aMemoryGUI_NUMBYTES即可。根据我们的测试,STemWin的演示例STM3开发板平台上使用43KB即可正常运行。代码4-2GUIConf.h文件内#ifndef2#define345*6 Multilayer/display78#define umnumberofavailable9* Multitasking#define (1)//Compilewithmultitasking* Configurationofavailable#define (1)//Supportatouchscreen(req.#define (1)//Supporta#define (1)//Windowmanagerpackage#defineGUI_SUPPORT_MEMDEV(1)//Memorydevices* Configurationofwindow#defineWM_SUPPORT_NOTIFY_VIS_CHANGED(1)//Enablesending* Default#define #endif/*Avoidmultipleinclusion/***************************EndoffileGUIConf.h文件了各种与emWin功能裁剪相关的宏,如GUI_NUM_LAYERS用emWin的最大可用层数(多显示器及复合视图支持),GUI_OSemWin是否emWin的代码4-3LCDConfig.c文件内1#include34* Layerconfiguration(tobe*//Physicaldisplay#defineXSIZE_PHYS#defineYSIZE_PHYS#defineVYSIZE_PHYS(YSIZE_PHYS<<//Color#defineCOLOR_CONVERSION//Display#defineDISPLAY_DRIVER27* Configuration* #defineVXSIZE_PHYS #defineVYSIZE_PHYSVRAM_ADDR#errorPhysicalXsizeofdisplayisnot #errorPhysicalYsizeofdisplayisnot #errorColorconversionnot #errorNodisplaydriver56* Public** ** Calledduringtheinitializationprocessinordertosetup displaydriver*void{//Setdisplaydriverandcolorconversionfor1st//Displaydriverconfiguration,requiredforLin- (0, (0,VXSIZE_PHYS,LCD_SetVRAMAddrEx(0,(void//Setuserpalettedata(onlyrequiredifnofixedpalette#if}92* ** Thisfunctioniscalledbythedisplaydriverforseveral Tosupporttheaccordingtasktheroutineneedstobeadapted thedisplaycontroller.Pleasenotethatthecommandsmarked 'optional'arenotcogentlyrequiredandshouldonlybeadapted thedisplaycontrollersupportsthese** LayerIndex-Indexoflayertobe -Pleaserefertothedetailsintheswitch -PointertoaLCD_X_DATA**Return <-1- -1-Commandnot 0-LCD_X_DisplayDriver(unsignedLayerIndex,unsignedCmd,void{intswitch(Cmd)//caseLCD_X_INITCONTROLLER://Calledduringtheinitializationprocessinordertoset//displaycontrollerandputitintooperation.If//controllerisnotinitializedbyanyexternalroutine//tobeadaptedbythe//return}caseLCD_X_SETVRAMADDR://Requiredforsettingtheaddressof RAM//withmemory RAMwhichispassedintheelementofLCD_X_SETVRAMADDR_INFO*p=(LCD_X_SETVRAMADDR_INFOreturn}caseLCD_X_SETORG://Requiredforsettingthedisplayoriginwhichispassedthe'xPos'and'yPos'elementofLCD_X_SETORG_INFO*p=(LCD_X_SETORG_INFOreturn}caseLCD_X_SETLUTENTRY://Requiredforsettingalookuptableentrywhichisinthe'Pos'and'Color'elementofLCD_X_SETLUTENTRY_INFO*p=(LCD_X_SETLUTENTRY_INFOreturn}caseLCD_X_ON://Requiredifthedisplaycontrollershouldsupportonandreturn}caseLCD_X_OFF://Requiredifthedisplaycontrollershouldsupportonand//return}r=-}return}189/***************************EndoffileLCDConfig.c文件包含了LCD_X_Config和LCD_X_DisplayDriver两个函数。LCD_X_ConfigemWinGUI_DEVICE_CreateAndLink配置了显示驱动及颜色转换格式,该函数的输入参数是根据Windows系统的环境配置的。接着调用LCD_SetSizeEx配置了显示尺寸,输入参数是本文件中的两个宏:#defineXSIZE_PHYS320#defineYSIZE_PHYS240320x240分辨率大小,我们可LCD_X_DisplayDriver是提供给emWin库的驱动回调函数,该函数根据输入的参数Cmd区分要进行的操作,如LCD_X_INITCONTROLLER表示初始化液晶控制器,LCD_X_ON表示启动液晶屏,LCD_X_OFF表示关闭液晶屏,这些命令是由用户根据需要emWinGUI_InitemWin运行GUI_Init函数会执行我们前面提到的GUI_X_Config、LCD_X_Config、LCD_X_DisplayDriveremWin时,主要的移emWin的上层应用函数无需修改,也无法修GUI文件在Include文件夹里的都是emWin库的头文件,由于emWin以库的形式提供给用户,所以 下的GUI.lib就是emWin的库文件了,它是编译好的二进制编码,无法查看源程序。在不同的CPU平台下,需要使用不同版本的M3和M4及IAR、MDK编译环境都有相对应的库文件,使用时要根据自己的平台选Sample文件Sample文件夹是关于emWin应用示例程序包。我们使用仿真的一个重要目的就是学习这个文件夹下的工程代码。跟Application文件夹中的emWin演示例程不一样,SampleemWin库提供的所有功能,当我们在《emWin用户手册》中看到某些功能不会使用时,可以来这里找找,一般都能找到示例程序。Sample文件夹下的部分示例程序见图第5 o在本章中讲解如何使用emWin仿真工程中提供给我们的各种小例程,学上一小节提到emWin仿真工程有Application演示程序及Sample范例程序,默认的时道从何入手,转而我们想从简单点的Sample范例程序学习,这需要配置一下工程的编译选项,本小节我们以Sample 配置工程文查看Application和Sample下的文件。展开emWin仿真工程的Application和Sample,可以看到这两个下的C语言文件图标有点小区别,见图5-1。在Sample下的C语言文件图标都带有一个红色的小符号,这个符号表明该文件没有被包含到工程,不参与编译过程。正是从这里我们知道在第3章中默认编译的是Application下的文件。5-1emWinApplicationApplicationSample是独立的工程,不能同Sample下的工程时首先要把Application的文件排除在工程Appaon->话框中“从生成中排除”一栏中把默认的“否”改成“是”,这样就可以把这些文件5-2。图5-2把Application下的文件从生成中排用emWin库函数显示“ oWorld”,这个程序是由Sample目录下BASIC_oWorld.c文件实现的。操作步骤如下:找到BASIC_oWorld.c文件,点击右键->属性,在弹出的框中“从生成中排除”一栏中把默认的“是”改成“否”,把该文件添加到将要编译的工程中,见图5-3。图5-3添加BASIC_owWorld.c文件到工完成了上面两个步骤之后,我们会看到Application下的文件图标都有了一个的小 下的BASIC_oWorld.c文件图标的小了,接下来 oWorld!”字样,见图5-4。学习BASIC_oWorld工程代运行BASIC_oWorld程序之后,自然比较好奇它的代码是如何实现的,打代码5- oWorld.c文12#include34* Public** void{ owhile1921/***************************EndoffileMainTaskmain函数一样,MainTaskGUI_Init函数,初始化了emWin所需要的运行环境,接着调用emWin库函数GUI_DispString在屏幕输出“o第6emWinGUI_InitGUI_DispString这些库函数在头文件里没有功能说明,《emWin用户手册》的说明了,包括前面一些章节里关于库函数的介绍,也都是从这个文《emWin用户手册》简《eWn用户手册》就是关于eger给出的eWn帮助文档,它的内容包括eWn简介、仿真、各种库函数详细信息、液晶驱动移植、配套工具软件的使用、eWn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论