3 软件设计
在ARM微控制器LPC 2468上移植嵌入式实时操作系统μC—OSⅡ,作为伺服压力机控制系统软件开发平台,同时在图形界面的开发上采用斗C/GUI作为开发工具。
3.1 开发平台选择
在诸多实时操作系统中,μC—OSⅡ是一种基于优先级的可抢先的硬实时内核,具有公开源代码、可移植性、可固化、可裁减、执行时间可确定性等特点,同时可由第三方提供μC/FS,μC/GUI,μC/IP等系统服务完成文件系统、显示、ip协议栈。因此选择μC—OSⅡ作为伺服压力机数控系统的软件开发平台。μC—OSⅡ包括了一个操作系统最基本的一些特性,如任务调度、任务通信、内存管理、中断管理等。
μC/GUI是Miefium公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LCD的应用程序提供独立于处理器和LCD控制器之外的有效的图形用户接口,能够应用于任何LCD控制器中,并且适用于任何8位/16位/32位CPU,允许支持ANSI C的任何编译器,通过配置宏,可支持任何接口。
3.2 移植μC—OSⅡ
ARM处理器可以工作在7种模式下,和本次移植相关的模式有:用户模式(usa)、系统模式(sYs)、中断模式(IRQ)、快中断模式(FIQ)。
从生产安全角度考虑,压力机上安装有光电检测装置,要求控制系统一旦检测到光线遮挡事件(例如人手伸入模具工作区),应立即无条件停止压力机。这个事件属于最紧急事件,要求CPU在第一时间内进行处理。
由于μC—OSⅡ仅仅管理常规中断(IRQ),而对快中断(FIQ)不作管理,在移植μC—OSⅡ内核的时候,对快中断进行了处理,直接使用nQ中断而不经过操作系统(图2),可通过一般的方法自由编写中断程序。理论上快中断的响应时间最大为29个时钟周期,本方案系统时钟为72 MHz,可以计算出FIQ的响应时间为0.4μs,能够满足实际要求。
处理快中断,首先要在启动代码文件Vector.8中中设置中断向量表,代码如下:
μC—OSⅡ的移植工作主要都集中在多任务切换的实现上,这部分代码用来保存和恢复CPU现场,只能使用汇编语言完成。要移植μC—OSⅡ,需要修改3个与ARM体系结构相关的文件,代码量大约500行。下面简单介绍这3个文件的主要内容。
1)OS_CPU.H文件。该文件主要内容为:数据类型定义、堆栈单位定义、堆栈增长方向定义、宏定义(包括开关中断的宏定义,以及进行任务切换的宏定义)。
2)OS_CPU_C.C文件。该文件主要内容为:任务堆栈初始化、系统钩子函数。文件中需要实现几个操作系统规定的hook函数,一般情况下,只需简单地将它们都实现为空函数。
3)OS_CPU_A.S文件。该文件主要定义开关中断、任务切换处理相关的几个函数,可按照规定要求编写。
3.3 移植μC/GUI
μC/GUI移植工作的主要内容为修改配置文件和编写驱动程序。
μC/GUI目录下的配置文件目录为Con_fig。其下有3个配置文件,分别为GUlCONF.h,GUlTouchConf.h和LCDConf.h。
GUICONF.h文件用于配置GUI移植到不同操作系统的选项,在本文中配置为移植到μC—OSⅡ中,允许多任务调用μC/GUI函数,支持触摸屏,显示防闪烁支持等即可。代码摘录如下:
GUITouchConf.h用于配置触摸屏的相关属性值,例如校正配置宏等。
LCD_Cod.h文件用于配置LCD显示屏的选项,包括颜色位数,水平、竖直方向的分辨率等。所配置的LCD为640×480像素,8位颜色深度(256色)支持。代码摘录如下:
μC/GUI的底层驱动包括LCD显示驱动和触摸屏驱动。对于目前大多数LCD控制器,μC/GUI提供了现成的驱动程序,不需要自己编写。μC/GUI中的触摸屏驱动须提供4个底层驱动接口函数,可根据相应的触摸屏手册编写。
3.4 应用程序设计
μC—OSⅡ最多可以管理56个用户任务。各个任务分配不同的优先级,各个具体任务的编写比较简单,只需要在对应的任务函数体中填入相应的处理代码即可。任务函数体如下:
伺服压力机控制系统由7个基本任务和若干中断处理任务构成:
运动控制任务:优先级0;
按键扫描任务优先级1;
信号检测任务优先级2;
输出控制任务优先级3;
润滑任务优先级4;
通讯任务优先级5;
界面显示任务优先级10;
最紧急事件处理FIQ中断;
普通紧急事件处理IRQ中断。