汪成义
(湖北经济学院 电子工程系,湖北 武汉 430205)
作为第三代嵌入式实时操作系统内核,μC/OS-III主要是为适应32位处理器的发展和业界近几年对系统的新要求,在μC/OS-II的基础上开发的一个不限总任务数、不限同优先级任务数的实时内核。μC/OS-III不仅延续了μC/OS-II所具有的可裁剪性、可固化性、可抢占性和高可靠性,而且具有资源管理、同步和任务间的通信能力,具有独特的实时内核配置机制、运行时的性能检测能力,具有新的快速中断源响应机制[1],以及通过引入新的时钟节拍机制确保了系统的实时性不受任务数目的影响[2]。而这些独特的特性也是在16位处理器上进行应用开发时特别需要的。美国Micrium公司已先后推出了超过45种架构的μC/OS-II源代码版本,并从2011年起,陆续推出μC/OS-III源代码的纯内核版和基于多个32位处理器架构的μC/OS-III源代码正式发布版本(一下简称正式版),μC/OS-III内核代码也充分考虑到了对16位处理器的兼容性,但对具体的16位处理器的支持较少,即使有,也要求片内资源为高配置的型号。另一方面,美国德州仪器(TI)公司的MSP430系列16位微控制器(MCU)具有业内领先的混合信号处理能力,也是目前行业内功耗最低的MCU之一,其中的MSP430F5529是一款具有集成USB的新型MCU,有着丰富的片内外设。本文拟将μC/OS-III在MSP430F5529上进行移植,并通过典型的应用设计对移植的有效性与实用性进行验证。
通过设计一款低成本多功能防盗窗控制器,验证μC/OS-III在MSP430F5529上也具有适用性。由于MSP-430F5529是一款只有8 KB内存(SRAM)的中档 16位微控制器,而 μC/OS-III对内存的消耗很大,所以其移植的成功并不能保证应用功能可以顺利运行。因此,本应用系统按照防盗窗控制器的实际功能需要,选择一组典型功能进行了具体设计。
本应用系统的硬件结构如图1所示。其中的按键有2个,用于工作模式切换、运行参数调整等;振动式传感器选用基于香港万保刚公司的振动开关SW-18015P构建的模块,用于感知强力击打、撬动式入侵等;触摸式位置感应器选用的是多个电容式触摸开关,以便在测试系统中以低成本方式模拟或代替传统的红外感应式、位移式多种传感器;发光二极管共有8支,兼顾状态显示、入侵位置直观显示、报警显示等功能;液晶屏用于各类提示信息、报警信息、状态信息的显示和类似电子钟等附加功能的显示。虚线框部分包括语音、消息、传动机构等的处理,用于后期扩展、完善。
图1 防盗窗控制器硬件结构
为适应各种不同硬件平台的需要,μC/OS-III系统在体系结构的设计上,采用了模块化的方式,将需要移植和不需要移植的程序进行了有效划分。同时,对实际应用系统各种外围电路的底层支持也是操作系统应完成的工作。在实际分析代码关系、模块关系和应用任务与系统模块依赖关系的基础上,可总结出能反应系统移植工作重点的μC/OS-III体系结构,如图2所示,其中的粗实线部分为移植工作的重点模块。
图2 基于移植视角的μC/OS-III体系结构
图2中以四层结构全面反应了一个基于μC/OS-III开发的应用系统的总体结构。图中硬件层的3个实线框是移植能否成功的前提,即目标处理器必须具有定时器和能周期性产生中断的机制,MSP430F5529已经具备。点划线框中的应用系统外设是指本应用系统的各种片外输入、输出与控制硬件电路模块,每增加一个不同类别的模块,也就增加了移植的工作量。
虚线框部分的应用层,其设计与实现工作不属于移植工作,但实际应用系统的功能是由应用层具体实现,系统移植后的性能也由应用层进行实际验证。2个配置头文件在应用层、内核层、硬件相关层都有涉及。其中,OS_CFG_APP.H中的内容主要是与具体应用有关的常量,包括任务堆栈大小、任务的优先级等;OS_CFG.H中的内容主要是与内核有关的常量,如CPU时间戳使能的设置等。两者中常量的设置可在满足任务调度需要并符合实际硬件特性的前提下灵活进行。
与CPU相关的源程序分成两部分,一部分是μC/OS-III内核源文件与CPU相关的部分,集中放在OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C 3个文件中;另一部分是应用层源程序与CPU及编译器相关的部分,主要放在 CPU_CORE.H、CPU_CORE.C、CPU_DEF.H、CPU.H 和CPU_A.ASM 5个文件中。
由于μCOS-II的广泛使用,Micrium公司在其网站中上传了大量基于不同架构处理器的μCOS-II正式版源码,虽然μC/OS-III在内核方面与μCOS-II有较大差异,但与CPU相关部分差别不大,这就为那些得不到Micrium公司直接支持的处理器平台提供了一条减轻移植工作量的有效途径。μC/OS-III的设计者在参考文献[1]中就明确建议先进行 μCOS-II的移植,再进行 μC/OS-III的移植会比较顺畅。下面就基于MSP430F5438的μCOS-II正式版中与CPU相关的源文件,说明各文件的主要内容,以及进行μC/OS-III向MSP430F5529移植的主要工作。
(1)OS_CPU.H:依照参考文献[1]中的提示,将 μCOS-II原有数据类型定义和进、出临界区宏定义移动到CPU.H中,保留上下文切换的函数原型声明等。
(2)OS_CPU_A.ASM(后缀可能不同,下同):将汇编子程序分别改名为OSCPUSaveSR和OSCPURestoreSR,程序其他部分不变。
(3)OS_CPU_C.C: 依照参考文献[1]中的提示,将钩子函数改名或去掉,如将 OSInitHookBegin改为 OSInitHook;数据类型按CPU.H中的定义改。
(4)CPU_CORE.H:为 CPU_CORE.C提供函数原型的声明等,不变。
(5)CPU_CORE.C:初始 化 CPU 时间戳定时器及相关操作等,不变。
(6)CPU_DEF.H:集中定义了一组依赖于CPU的常量,如堆栈生长方向、CPU字的大小及存储模式等,是为了适应不同的处理器和编译器[3],不变。
(7)CPU.H:依照参考文献[1]中的提示,将数据类型定义和进、出临界区宏定义移到此文件,并在每个数据类型前加上“CPU_”,如 CPU_INT8U等。
(8)CPU_A.ASM:主要是子程序 CPU_SR_Save和CPU_SR_Restore的定义,不变。
板级支持包的移植与硬件环境有关,即使是相同的处理器,只要硬件不同,就需要移植。具体可分为三块:硬件抽象层、外设支持库和板级支持包上层。外设支持库直接从处理器厂家(即TI公司)网站下载获得即可,是文件夹名为 F5xx_F6xx_Core_Lib的一组源文件[4],提供如电源管理、时钟处理等基本函数库。
硬件抽象层是对处理器之外所有硬件进行驱动的底层软件,是应用层软件对硬件的操作能否实现的关键,一般需要依据具体的硬件按照模块的方式逐一进行编程,如本设计中的振动传感器电路模块,在硬件抽象层编写了针对性的硬件驱动程序HAL_SHAKESWITCH.C,分别定义了初始化、中断使能、中断去使能、中断处理4个函数,最后在应用任务中实现了相应的实时报警功能。
板级支持包上层主要指BSP.C和BSP.H两个文件。BSP.H主要是配合BSP.C进行函数原型的声明。BSP.C则主要是定义一组函数,以供应用层程序使用,如初始化硬件的BSP_Init()函数及相关联的输入输出类函数、中断使能设置的BSP_IntEnAll()函数等。实际编写BSP.C时,借用了μCOS-II正式版中的对应文件,结合硬件抽象层和外设支持库,依据外围硬件和应用需要进行了扩展。
基于μC/OS-III的应用层程序应设计成面向任务的程序结构,而传统的基于无操作系统嵌入式系统的程序采用的是前后台式的程序结构。前者更能保障系统的实时性,且在功能较多时,程序设计与实现的过程比后者更加高效,但前者的内存开销大,任务不宜过多。本应用系统的功能与任务的关系如表1所示。
表1 应用层功能与任务的关系
为验证 μC/OS-III在MSP430F5529上移植的可行性,并研究实际应用时的限制与定位,本应用系统的测试分为单任务测试、系统测试和系统受限测试3个阶段。
(1)单任务测试:按照表1中各任务的功能安排,编写并逐个调试、实现单个或部分任务的功能,初步验证了移植的可行性。
(2)系统测试:测试多任务应用系统的功能实现与任务间的配合、协调,主要有4方面功能:①平时可提供时钟或温湿度显示类功能;②若有暴力式入侵,会感知并及时提供不同方式的告警;③若有攀爬式入侵,能感知位置并及时提供包含位置信息的多方式告警;④实时显示系统当前状态信息等。为便于测试观察,系统显示安排如下:液晶显示分8行,用于显示当前工作模式(用于区分日常服务模式和自动告警模式)、攀爬式入侵的提示与状态、暴力式入侵的提示与状态、系统运行的状态信息等;8只LED灯同步提供了状态与入侵位置信息。实际测试过程表明,以上四个方面的功能在实验环境下的同一应用软件中可稳定实现,并能借助液晶屏、LED灯等实时观察到,系统被入侵时的输出处理正确。
(3)系统受限测试:测试系统的潜在限制:①系统在实现上述功能时,任务不能太多,8个以内为宜,原因是受8 KB内存限制;②每个任务的堆栈空间不宜太大,并要逐个分别计算,以够用为限,对开销过大的任务要进行适度优化,原因同①;③液晶屏适宜选用单色的小显示屏,如 102×64或 128×64的单色屏,不宜用真彩色的大屏,原因是受MSP430F5529的内存及刷新处理能力限制。
测试结果表明,将实时操作系统μC/OS-III移植到只有8 KB内存的中档16位微控制器MSP430F5529是可行的。考虑到MSP430F5529片内还有2 KB专用于USB的SRAM也有可被借用的潜力[5],MSP430微控制器F5系列中还有16 KB、32 KB和66 KB内存的型号,再考虑到MSP4300微控制器所具有的低功耗、低成本特点,以及μC/OS-III在实时性和编程高效性方面的优势,若以μC/OS-III+MSP430的组合作为设计平台,可突破上述限制,从而进一步形成高、低端系列化多功能防盗窗控制器产品,也可为其他产品的设计提供参考。
[1]LABROSSE J J.μC/OS-III:The real-time kernel[M].Micriμm Press,2011.
[2]宫辉,龚光华,黄土琛,等.μC/OS-III中的高效时钟节拍管理机制[J].单片机与嵌入式系统应用,2012(12):79-81.
[3]Micriμm,Inc..μC/CPU user′s manual[Z].2010.
[4]Texas Instruments Inc..MSP-EXP430F5529 experimenter board user′s guide[Z].2011.
[5]Texas Instruments Inc.Datasheet:MSP430F551x/MSP430-F552x mixed signal microcontroller[EB/OL].(2009-05-01).http://www.ti.com/lit/ds/symlink/msp430f5529.pdf.