摘要:本文介绍了使用TI公司的超低功耗MSP430单片机与uC/OS相结合设计数据采集系统的方法,采用了uC/OS的多任务的软件设计方式代替了传统的前后台式的嵌入式软件设计方法,使得软件系统模块化,并且克服了前后台式软件设计的弊端,增前了系统的实时性。
关键词:嵌入式操作系统;邮箱;多任务;uC/OS;MSP430
1前言
近年来随着IC设备功耗和体积的不断减小,手持设备的应用领域变的越来越广泛。但是另一方面,传统的前后台式的软件设计方法却限制了硬件系统功能的充分发挥,影响了系统的实时性与稳定性。本文介绍了一种基于嵌入式操作系统uC/OS上设计系统软件的方法,即克服了原有前后台式软件设计的一些弊端,又充分发挥了硬件特性,增强了系统稳定性,很好的解决了手持数据采集设备多任务软件系统实时性不强的问题。
2 uC/OS简介
uC/OS是由EAN J.LABROSSE个人开发的嵌入式操作系统。该系统是一个源代码完全公开的实时内核,设计人员在应用过程中可以按照自己的需求对内核进行裁减和扩展,以满足不同工程对应用软件设计的要求。uC/OS是完全占先式的实时内核,支持多任务操作,并且每个任务都有自己单独的栈,这样就清晰了任务之间的界限,增强了系统的稳定性。uC/OS还提供了很多的系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请和释放、时间函数等,并且还支持多达255层的中断嵌套。利用这些系统服务就能轻而易举的完成复杂逻辑的要求,从而缩短系统开发的周期,降低开发的成本。同时uC/OS良好的可扩展性和可移植性,使其能够广泛的应用到各种架构的微处理器上。
3硬件系统设计
3.1 硬件系统设计要求
手持数据设备的硬件设计具有一些特殊的要求,首先手持系统一般都是采用自身携带的电池供电,对硬件设备功耗的要求十分严格,另外手持设备还需要具有一个良好的人机交互的功能,一方面要能显示各种数据的变化,令一方面也要能响应外部的人为命令。考虑到这些因素,系统选取了TI公司的MSP430单片机作为硬件设计的核心平台。
3.2 MSP430硬件简介
MSP430是TI公司近几年推出的16位系列单片机,采用了TI公司最新的低功耗技术,使其在众多的单片机中独树一帜。MSP430工作在1.8~3.6V电压下,有正常工作模式(AM)和4种低功耗工作模式(LPM1、LPM2、LPM3、LPM4),在电源电压为3V时,各种模式的工作电流分别为:
AM:340uA
LPM1:70uA
LPM2:17uA
LPM3:2uA
LPM4:0.1uA
单片机可以方便的在各种工作模式之间切换。MSP430也具有非常高的集成度,单片集成了多通道12bit的A/D转换、片内精密比较器、多个具有PWM功能的定时器、斜边A/D转换、片内USART、看门狗定时器、片内数控振荡器(DCO)、大量的I/O端口以及大容量的片内存储器,单片可以满足绝大多数的应用需要,节省了大量的板上空间。此次设计中选择了MSP430F149作为硬件设计平台,其多种功耗模式完全适合设计低功耗的要求,丰富的片上资源又能够满足交互界面的开发。更重要的是其多达60KB的闪速存储器和2KB的RAM为uC/OS的移植与稳定运行提供了充分的空间。
3.3 手持数据采集系统硬件结构
对于本次设计,一个完整的手持数据采集系统还需要具有以下硬件模块:
1)A/D转换模块,板上内置传感器,预留模拟信号输入接口。
2)DS1302外部实时时钟。
3)两个RS232串口,用来和上位机和其他设备通信。
整体的硬件示意图如下所示:
4 软件系统设计
4.1 前后台软件设计方法的弊端
一般的嵌入式软件系统的设计都是采用前后台式的设计方法,前台程序是一个无限循环,循环依次调用相应的函数来完成对应的操作,后台是中断服务程序,负责处理异步事件。这种设计方法在实际应用中存在三个缺陷:
一是中断不能得到及时响应,处理时间过长,无法保证系统的实时要求。
二是当系统任务多时,要实现多个任务实时操作的常规方法是采用多级嵌套来实现多个任务并行处理,这就增加了软件编写的难度,同时降低了软件系统的可靠性。
三是各任务之间信息交换困难。多任务在运行时,任务之间不可避免的有同步和互斥的情况发生。前后台设计方法一般采用全局变量的方法来解决通讯问题,但任务多情况复杂时容易出错,如果调用不当就会发生死锁。
工程中设计的数据采集系统是一个典型的多任务系统,并且要能够响应多个外部信号,传统的前后台式的软件设计方法已经不能满足工程的需要,因此设计中引入了uC/OS,采用了多任务式的软件设计方法。
4.2 基于uC/OS的软件设计
使用uC/OS设计软件系统首先要实现uC/OS在硬件应用平台上的移植,主要就是完成对OS_CPU_C.C,OS_CPU_A.ASM等几个与处理器相关文件的改写,使其能够适应硬件和编译环境的要求,选取的编译器一定要能够支持函数的重载,此次设计选取了IAR公司的IAR for MSP430 1.26A。另外在本次设计中,笔者将空闲任务修改为如下形式。
void OSTaskIdleHook (void)
{
LPM3;/* Enter low power mode
}
这样当系统进入空闲状态时就会进入低功耗模式LPM3,从而充分发挥硬件低功耗的特性,这也体现了uC/OS应用的灵活性。
完成移植后就要根据工程要求合理划分系统任务,确定任务间的通信机制以及各个中断信号。设计中,我们将整个系统划分为如下几个部分:
任务1 数据采集及显示
任务2 串口通讯
任务3 DS1302实时时钟设定
外部中断:多个外部键盘触发中断,用来唤醒不同的系统任务。
Timer中断:一个timerA中断,用来显示系统时间。
图2系统软件流程图
任务1的功能是采集外部的模拟输入信号,将采集到的数据通过一定的滤波算法和转换处理后显示在LCD上面,并将数据保存到一个数组里面。该任务是系统的最高优先级任务,用邮箱CltMbox1和CltMbox2来控制,当任务开始的时候要等待邮箱CltMbox1或CltMbox2,如果没有邮箱的释放,系统将转到任务2执行。如果有数据采集的外部键盘触发信号产生,当按键时间超过1s时释放邮箱CltMbox2,则系统开始循环执行任务1,直到有外部停止中断信号挂起CltMbox2才中止。如果按键时间小于1s则释放邮箱CltMbox1,任务1循环执行10次后释放邮箱CltMbox1,然后进入等待状态,直到再次有外部信号的触发才开始执行。任务1每次执行后都要将自己挂起1s,这一方面为其他任务的执行提供了时间,另一方面也是考虑到人眼的实际分辨能力,太快的LCD的刷新频率是没有意义的。
任务2实现的是串口通讯功能,主要是用来完成手持设备与上位机的数据交流,其执行也是通过外部键盘的触发信号来控制。当发送按键触发后将会释放一个邮箱SMbox,任务2在得到这个邮箱后将会把采集到的数据发送给上位机,如果需要修改软件的滤波算法或转换公式的参数的话就要触发键盘的接收键,任务2在得到相应的邮箱RMbox后将接收上位机的数据,改变对应的参数。
任务3是外部实时时钟的设定任务,它是3个系统任务中优先级最低的。在传统的前后台软件设计方法中,如果将这个任务放到前台系统中,其大量的耗时将降低系统的实时性,使得其它中断任务得不到及时的响应,如果将其放到后台处理,在中断中调用过大的程序又会降低系统的稳定性,但在uC/OS多任务的体系结构中却很好的解决了这个问题。作为系统的最低优先级的任务,任何处于就绪态的高优先级的任务都能打断外部实时时钟的设定,当在其他更高优先级任务完成后,设定过程会在原先中断的地方继续执行。在外部实时时钟设定的过程中如果有数据采集触发信号产生,任务1将进入就绪态,但是由于数据采集的过程非常的快,当任务1挂起1s的时候任务3将会再次得到系统的控制权,给我们的感觉就像在设定外部时钟的同时又完成了系统的数据采集和显示,从而利用uC/OS提供的这种分时操作的功能,很好的解决了系统的实时性问题,增强了系统的稳定性。
时间显示是系统中调用最多的任务,考虑到系统的功耗问题,设计中将时间显示任务放到了TimerA的中断里面来完成。通过外部键盘的触发将开启TmerA的中断使能,LCD将开始显示外部实时时钟的时间。同样通过键盘控制也可以关闭TimerA的中断使能,这样在没有任何任务就绪的情况下,系统将进入空闲任务中,从而进一步降低了系统的功耗。
4.3系统升级扩展
为了满足远程数据采集处理的要求此系统可以与GSM MODEM联合使用,以达到远程无线传输数据的功能。数据采集系统与GSM MODEM通过RS232通信,将需要发送的数据输给GSM MODEM,然后再通过GSM MODEM发送到远程的数据采集站。增加此功能的软件修改十分简单,只需将此功能作为一个独立的任务添加到uC/OS中,通过键盘触发来完成该任务的调用,而无需再对整个软件系统的逻辑进行修改,这也体现了uC/OS模块化软件设计的优势。需要注意的是GSM MODEM的初始化过程时间较长,在这个过程中尽量不要有任务的切换,从而造成整个发送过程的失败。有效的方法就是将GSM的发送作为最低优先级的任务来处理,在没有其它任务触发后再调用该任务。
四、结论
uC/OS在手持数据采集系统的成功应用为手持设备软件系统的设计探索了一条新的道路。使用uC/OS设计嵌入式软件克服了传统的前后台式的软件设计方法的弊端,提高了系统的实时性和稳定性,使得软件系统代码模块化,更进一步增强了系统升级扩展的能力。未来,在嵌入式系统软件设计中uC/OS的应用领域必将变得更加的广泛。