[讨论] uC/OS与MSP430的手持采集系统

黑衣人   2008-9-9 09:36 楼主
近年来随着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串口,用来和上位机和其他设备通信。
整体的硬件示意图如下所示:
图1 硬件系统示意图
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中断,用来显示系统时间。
http://www.armforum.cn

图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后将接收上位机的数据,改变对应的参数。

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复