您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术μC/GUI的结构框架和基于STM32平台的μC/OS-II上的μC/GUI移植过程 正文
μC/GUI的结构框架和基于STM32平台的μC/OS-II上的μC/GUI移植过程

μC/GUI的结构框架和基于STM32平台的μC/OS-II上的μC/GUI移植过程

点击数:7172 次   录入时间:03-04 12:03:42   整理:http://www.55dianzi.com   嵌入式系统-技术

    μC/GUI是一种专为嵌入式应用设计的通用图形接口软件。本文详细介绍了μC/GUI的结构框架和基于STM32平台的μC/OS-II上的μC/GUI移植过程,并在此基础上进行图形界面设计;阐述了μC/GUI的窗口管理机制,提出了实现μC/GUI中文小型字库的两种方法并采用存储设备解决了图形显示的闪烁问题。

    嵌入式系统的图形用户界面,要求具有占用资源少、性能高、可靠性高、可移植、可配置等特点,μC/GUI就是这样一种专门为嵌入式应用设计的图形用户界面软件。μC/GUI可应用于多任务环境中,同时使用实时操作系统与μC/GUI,既可以发挥优先级的实时性,又能实现良好的人机界面。本文使用Cortex-M3内核的STM32平台,介绍了基于STM32平台的μC/OS-II上的μC/GUI移植过程,并在此基础上开发了基于μC/GUI的图形用户界面。

1 μC/GUI结构框架
1.1 μC/GUI的文件组织
    μC/GUI软件采用模块化组织架构,其中较为重要的文件目录是配置文件目录Config和GUI库文件目录。考虑到未来升级方便,建议保持μC/GUI原有的目录结构,这样升级到新版本时只要覆盖原文件目录即可,而不会改变整个工程的文件路径。
    μC/GUI是一个源代码开放的图形系统,它提供了丰富的资源,包括二维绘图库,多字体、可扩充的字符集,UnICode,位图显示,多级RGB颜色管理及灰度处理调整机制,动画优化显示,具有Windows风格的对话框和预定义控件(按钮、编辑框、列表框、进度条、单选复选框、滑动条等);同时,支持键盘、鼠标、触摸屏等输入设备和双LCD的输出,提供占用极少RAM的窗口管理体系。各个子目录的路径及功能支持如表1所列。

a.JPG

   
1.2 μC/GUI的层次结构
    μC/GUI内核提供多种图形显示功能,用户程序通过API函数接口调用μC/GUI函数库中的各个功能函数,然后各个功能函数通过调用硬件驱动实现图形界面显示。

b.JPG

   
    一个典型的包含有μC/GUI的软件系统可以理解为一个层次结构,详细的μC/GUI软件体系的层次结构如图1所示。

2 基于STM32平台的μC/GUI移植
2.1 STM32F103系列单片机和移植平台简介
   
硬件开发平台的核心是ST公司的STM32F103系列单片机,实时操作系统选择移植性较强的μC/OS-II。STM32F103系列单片机最高主频为72 MHz;片内多达51 2 KB的Flash并可以直接运行程序,片内还有64 KB的RAM;拥有众多的定时器、中断源和外设,内部集成了一个高速外部存储器接口FSMC总线,可以很方便地控制液晶显示模块。目标平台的液晶模块采用320×240分辨率,通过FSMC总线接口连接STM32F103单片机,并在系统的内存区开辟一块内存作为液晶显示的后台缓存。
2.2 μC/OS-II上的μC/GUI移植
    μC/GUI的移植内容主要分成4部分:μC/GUI配置文件的参数修改,LCD驱动程序的编写,LCD触摸屏驱动程序编写,以及与μC/OS-II操作系统相关接口部分的修改。
2.2.1 μC/GUI配置文件的参数修改
   
主要是根据系统的实际情况对GUI/Config目录下3个配置文件的参数进行修改,设计采用的LCD选用320×240的液晶显示模块,LCD控制器采用ili9320。
    ①LCDConf.h文件主要定义LCD控制器和显示屏尺寸及可选择的功能。修改如下:
   
  d.JPG



www.55dianzi.com


2.2.2 LCD驱动程序的编写
   
LCD的驱动程序在GUI/LCDDriver目录下,在本次移植中编写的ili9320.c驱动文件主要定义了GUI与LCD的硬件接口函数,包括画点、线、矩形、多边形、位图等二维图形的函数等等。μC/GUI所有的系统函数都是通过调用这些硬件接口来实现其功能的,而这些接口函数又可以通过调用画点函数来实现,可以认为几乎所有的μC/GUI显示功能都是通过最终调用画点函数来实现的。所以笔者的LCD驱动程序重点在画点函数的编写。代码如下:
    e.JPG
2.2.3 LCD触摸屏驱动程序的编写
   
STM32F103通过SPI总线与触摸屏芯片相连,通常的方法是采用轮询的方法获取触摸屏的触点动作,这种方法不仅实时性差而且浪费单片机的执行周期。采用触摸屏的触点动作通过外部中断进行检测,在中断服务程序中获取触点的位置坐标,并通过调用函数GUI TOUCHStoreSta te(xScreen,yScreen),将触点坐标保存并通知μC/GUI。由于触摸屏和LCD的大小不一定完全相等,坐标原点的位置也可能不同,为了实现对应,需要进行A/D转换,实现数值到逻辑坐标的转换。
2.2.4 操作系统相关接口部分的修改
    μC/OS-II操作系统下使用μC/GUI需要提供一些内核接口函数来实现任务间同步。有了这些内核接口函数,就可以使μC/GUI运行于μC /OS-II系统上,通过任务调度来实现各个任务之间的协调工作,接口函数实现如下:
    f.JPG
    至此,μC/GUI的移植就基本上完成了,需要编写测试用例,如果显示效果不理想,再对移植的GUI进行底层配置优化和改进。

3 μC/GUI的图形界面设计
    μC/GUI是具有类似Windows窗口风格的图形系统,以其窗口作为内存管理的基本单元,采用消息传递机制和回调函数机制。μC/GUI提供给窗口和窗口控件回调机制的背后,是一个事件驱动标志(即消息)。回调函数的过程也是消息传递的过程。
3. 1 μC/GUI的窗口管理机制
    μC/GUI的窗口管理器用于管理LCD屏幕上图形显示的区域(即窗口),使其重叠、嵌套和并列。使用μC/GUI窗口管理时,任何能显示在显示终端上的内容都包含在一个窗口中,这个窗口是LCD屏幕上的一个给用户画图或者显示目标的区域。窗口的创建、显示以及删除都离不开消息传递和回调函数机制。
    在μC/GUI中定义了数十种用于各类基本操作的消息宏,对每个窗口的操作都是通过向其对应的回调函数传送消息参数来完成的。回调函数是由用户定义的,当特定事件发生时,指示图形系统调用特定的函数。当窗口的内容发生改变时,它们用来自动重绘窗口。具体操作是通过一个指向函数的指针从窗口结构体数据项中得到回调函数的首地址,并将消息作为参数调用该函数来完成的,回调函数在接收到消息后进行相应处理。
    回调函数的基本作用是实现窗口刷新。一个简单的自动更新窗口的回调函数如下:
   
    h.JPG
3.2 μC/GUI实现中文小型字库的两种解决方法
    μC/GUI带有多种常用的ASCII字体,也支持UNICODE字符显示,考虑到嵌入式系统内存资源有限,没有装入汉字库,可以根据系统的实际需要建立一个小型汉字库,以解决汉字的显示问题。在μC/GUI下笔者提出两种实现中文小型字库的解决方法。
    (1)在μC/GUI的字库结构体中建立一种新的字体
    μC/GUI的文字显示是通过查找字模的方式实现的。字库中的每个文字都有其对应的字模,所有的字模都是由GUI FONT和GUI FONT PORT这两个结构体来管理的。从汉字库中选取必需的汉字组成字库,并将汉字对应的不连续汉字机内码映射到一个连续区域。此时需要建立一个GUI_FONT_PROP结构来管理所有的汉字。例如,要实现“设置”这2个字,具体的伪代码如下:
    i.JPG

[1] [2]  下一页


本文关键字:暂无联系方式嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术