2. emXGUI文件和应用架构

2.1. emXGUI目录简介

解压下载得的emXGUI文件后,进入到emXGUI目录见 图2_1

图 2‑1emXGUI文件说明

图 2_1emXGUI文件说明

emXGUI库包含了如下内容:

  • arch文件夹:主要包含架构相关的内容,如不同类型液晶屏的绘图引擎示例以及不同操作系统平台下的信号量、延时接口。

  • drv文件夹:包含了emXGUI使用的驱动接口文件,如液晶、触摸、内存管理接口的初始化,这是移植emXGUI主要修改的内容; 其中还包含有gui_drv_cfg.h文件用于定制驱动的各项配置; gui_startup.c包含初始化emXGUI的示例;gui_desktop.c包含使用emXGUI建立桌面的示例。

  • inc文件夹:它包含了全部的emXGUI库核心的头文件,各种关于库函数的声明、定义都在这些文件里面。

  • libs文件夹:它包含了emXGUI的代码库文件,针对Cortex-M0、M3和M4这些不同 CPU内核以及在GCC、MDK这些不同编译环境, 都有一个相对应的emXGUI库,在使用的时候要根据自己的平台选择合适的库文件。

  • resource文件夹:包含emXGUI可能使用的资源文件,如字体数据、图片数据等。

  • tools文件夹:它包含了bin2c.exe、XBF字体生成器等软件工具。

2.2. 文件说明

下面的针对具体的文件进行介绍。

表格 2‑1 emXGUI具体文件说明

目录/文件名

说明

libs

emXGUI核心库文件

emXGUI100_MDK_xxx.lib

emXGUI核心API库文件,MDK版,XXX内核

x_libc_MDK_xxx.lib

重实现的C标准库文件,MDK版,XXX内核, 为方便移植至不同平台,emXGUI使用的C库都是x_libc中实现的

arch目录

主要包含emXGUI架构相关的文件,如液晶类型、操作系统接口

GUI_Arch.c

架构相关的总文件

GUI_TouchPanel_Calibration.c

电阻屏使用的校准接口

GUI_TouchPanel.c

触摸屏控制接口,包含初始化,坐标处理以及校准

arch/GAL目录

本目录包含绘图引擎相关的文件

GL_Cursor.c

包含光标的外观及控制接口,可修改本文件定制光标的外观

GL_MEM_xBPP.c

x(8/16/32)位的内存绘图接口,适用于显存型液晶屏,往显存写入数据即可直接显示,如STM32F429使用LTDC驱动的液晶屏

GL_MPU_16Bit.c

16位MPU通用绘图接口,适用于自带液晶驱动的液晶屏,显示时需要使用特定命令与驱动寄存器进行交互,如自带ILI9341驱动器的液晶

arch/inc目录

包含架构相关的主要头文件

gui_drv.h

驱动头文件

GUI_Font_Freetype.h

自定义字体头文件

arch/Options目录

包含各种操作系统的接口文件

X_GUI_xxxx.c

操作系统接口,包含互斥锁、信号量、线程句柄、系统时间和延时等操作

resource/xft_font目录

emXGUI可能使用到的XBF字体资源文件

ASCII_x_yBPP.c

示例ASCII编码的xft字体数组文件,其中x为字体宽高,y为抗锯齿参数(数值越大越平滑,占用空间越大),C数组文件适用于直接添加至工程并作为程序数据烧录到MCU内部FLASH

ASCII_x_yBPP.bm_info

示例ASCII编码的xft字体bin文件,与同名的C文件功能类似,主要用于作为资源文件烧录到外部SPI-FLASH、SD卡等存储器上

GB2312_x_yBPP.c

示例GB2312编码的xft字体数组文件,由于GB2312编码数据文件较大,不建议直接存储在MCU的内部FLASH

GB2312_x_yBPP.bin

示例GB2312编码的xft字体bin文件

drv目录

包含emXGUI驱动接口文件

gui_drv_cfg.h

驱动配置,包含是否使用鼠标、键盘、触摸屏等输入设备;使用的字体类型;液晶的分辨率和像素格式等内容。

gui_startup.c

emXGUI初始化和启动的示例文件

gui_desktop.c

使用emXGUI创建桌面的示例文件

gui_lcd_port.c/h

液晶驱动接口

gui_mem_port.c/h

内存管理接口

gui_log_port.c/h

日志输出接口

gui_font_port.c/h

字体管理接口

gui_input_port.c/h

输入设备接口(可选,可在gui_drv_cfg.h文件关闭输入设备配置,不使输入设备时可不添加本文件到工程)

gui_touch_port.c/h

触摸设备接口,使用触摸屏时在此添加驱动(可选)

gui_resource_port.c/h

资源设备读写接口,如把资源文件存储在外部SPI-FLASH可使用该接口进行访问(可选)

gui_picture_port.c/h

图片读写接口,显示外部资源图片时可在此编写访问资源设备的接口(可选)

inc目录

def.h

一些类型和常用函数定义

emXGUI_Arch.h

emXGUI架构头文件

emXGUI.h

emXGUI总的头文件,包含emxGUI上层API的声明

GUI_Font_XFT.h

字体配置头文件

x_libc.h

重实现的C库x_libc相关头文件

x_obj.c/h

链表相关代码

2.3. emXGUI核心库文件

emXGUI核心库文件(如emXGUI100_MDK_CM4.lib)提供了emXGUI所有可用的API,它所提供的API函数声明都可在emXGUI.h文件找到,在编写界面应用程序时,也只需要包含emXGUI.h这一个头文件。

2.4. C标准库x_libc

为适应不同的平台,emXGUI自带了C标准库的函数,如字符串处理strlen、strcpy等,为进行区分,这些重新实现的库函数都带了个“x_”前缀,如x_strlen、x_strcpy等,这些函数与C标准库函数的功能一样,整个库被称为x_libc(如x_libc_MDK_CM4.lib)。使用时可通 过x_libc.h文件查看x_libc中提供的函数声明。

特别地,x_libc中还包含了内存堆管理函数,如x_heap_init、x_heap_alloc、x_heap_realloc、x_heap_free等,使用这些函数可管理多个x_heap内存堆。

2.5. emXGUI 应用的软件架构

典型的emXGUI构建程序其架构见 图2_2

图 2_2emXGUI软件架构图

图 2_2

该架构看起来并不复杂,从最底层看起, 首先是硬件层,硬件层就是指最基本的板级支持软件包(BSP),也就是我们常说的底层驱动,它提供了对硬件平台资源最直接的访问;emXGUI软件库承上启下,它运行在硬件层之上,与硬件层之间主要靠液晶驱动和输入设备连接起来,向应用层则提供了各种便于用户制作GUI应用的接口。

在没有使用emXGUI的软件架构中,很可能就是由硬件层直接过渡到应用层,甚至根本没有分层的概念,这样的应用程序将十分依赖于某个特定的硬件平台,不容易迁移到其它设备之中。从这个架构图可以看出,只需要编写好液晶驱动这个粘合emXGUI库和硬件BSP层的中间件,就可以正常使用emXGUI了,迁移应用到不同的平台也简单得多。