uCOS-II在车载GPS移动终端中的应用
一、 统概述
目前市场上的商用嵌入式系统产品,如Vxwork、PSOS和Windows CE等已经十分成熟,提供有力的开发和调试工具,但开发成本昂贵,而uCOS-II是一种多任务实时 *** 作系统,内核源代码公开,短小精干,移植性较强,非常适用于一些小型系统开发。本系统描述了如何将uCOS-II移植应用到MCS51系列单片机上,并论述了如何把它实际应用到“嵌入式设备—车载GPS”系统中。
1、 uCOS-II简介
实时嵌入式 *** 作系统uCOS-II是基于优先级的抢占式实时多任务 *** 作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息队列)和内存管理等功能。绝大部分代码用C语言写成,与硬件相关部分用汇编语言编写,而且它的源代码是公开免费的。
uCOS-II是面向中小型嵌入式系统的,包含全部功能模块的内核大约为10K,如果经过裁减只保留核心代码,则可压缩到3K左右。RAM的占用量与系统中的任务数有关,任务的堆栈要占用大量的RAM空间,堆栈的大小取决于任务的局部变量、缓冲区大小及可能的中断嵌套层数。应用程序的时间精度由系统时钟节拍决定,uCOS-II需要用户提供周期性的时钟信号源,用于实现时间延时和确认超时,一般时钟节拍应在10到100HZ之间(最大精度为10ms),因为uCOS-II在每一个节拍都要检查有没有更高优先级的任务在等待执行,若有,就要进行任务切换,所以时钟节拍率越高,系统的额外负荷就越重。
2、系统的设计目标
本车载移动终端主要完成以下这些控制功能:
(1)位置及相关信息传送,包括实时请求发送、等时间间隔发送、等距离发送,传送方式包括GPRS方式和短信方式,由于用GPRS方式进行数据通讯按流量记费,每1K字节2-3分钱,费用相对短信低很多,因此本系统采用GPRS为主,短信为辅的通讯方式。
(2)报警功能,分以下几部分:
A、特定区域报警功能:设定报警特定区域后(如控制中心规定的行驶任务区域),当车辆驶出设定区域时,监控中心向车载单元报警,并及时记录车辆的实时位置信息。
B、紧急报警功能:当车辆遇到抢劫、交通事故等紧急情况时,司机可以通过紧急求救按钮向控制中心发出求救信号,并上传车辆定位数据。
C、防盗报警功能:当车辆设为防盗状态时,任何对车辆的非法移动,车载单元会自动报警并上传车辆定位数据。
D、掉电报警功能:当车载单元主电源掉电(或被人为切断)时,车载单元会自动报警并上传车辆定位数据。
E、能自动报警与手动报警相结合:系统支持手动的单键报警和智能设备产生的自动报警功能。单键人工报警需要司机进行快速隐蔽的单键 *** 作快速报警。自动报警如智能非法移动报警,系统自动产生报警信息并发送到监控中心,并保存报警数据,监控中心的人员可以根据需要采取措施。
(3)电源监控功能,实时监控备用电源,如果发现电量不够,将自动切换到充电模式,直到电量充足后自动切断充电模式。
3、 系统的功能块
系统结构图如图1所示,有外向内可分三层:硬件电路层、任务层、 *** 作系统层。
图1 系统结构图
二、硬件电路层设计
本系统的移动终端主要包括以下四个部分组成:GPS模块、GPRS模块、手柄、单片机控制模块,其大致功能分述如下:
(1) GPS模块——用于卫星定位数据的采集,采集时间间隔可设定,最小间隔为1秒采集一次。
(2) GPRS通信模块——用于实现GPRS数据的收发、短信息收发和语音通话功能。
(3) 手柄——用于语音通话。
(4) 单片机控制模块——用于控制GPS、GPRS模块的数据接收、发送、语音通话控制、短信息收发、电源监测管理和对汽车进行控油控电等功能。
三、任务层的设计
1、系统任务层组成及其优先权设置
系统任务层并行存在以下六个任务:监视任务、按键处理任务、摘挂机任务、GPRS任务、短消息任务、串口接收任务。每个任务均有以下三部分组成:应用程序、任务堆栈以及任务控制块。其中只有应用程序被烧入ROM,而任务本身则被置于RAM,待系统运行时再建立。任务堆栈用以存储CPU寄存器内容。当某任务由运行态变为其它状态时,CPU寄存器内容压入相应任务堆栈,反之则将相应任务堆栈内容置入CPU寄存器。作为系统中定义的一个数据结构,任务控制块的内容包括任务堆栈的地址、任务当前状态、任务优先权等。 *** 作系统通过查询任务控制块内容实现对任务的管理。
优先权的设置由各任务的执行顺序以及对系统安全性影响的大小决定,其优先权从高到低依次为:监视任务、按键处理任务、摘挂机任务、GPRS任务、短消息任务、串口接收任务。本系统采用静态优先权设置,即运行过程中任务优先权不变。
2、 任务的状态
本系统中各任务的状态有4种:等待态、就绪态、运行态以及中断态。状态的转换关系如图2所示。当一个任务占用CPU时该任务处于运行态,其优先权必较所有就绪态任务优先权高。若系统运行导致就绪态某一任务的优先权高于运行态任务优先权,则调用调度函数,运行态任务将丧失对CPU的占用权而转为就绪态,优先权最高的就绪态任务转为运行态。某一时刻只能有一个任务处于运行态。任务在就绪态和运行态间的转化被称为任务切换。当运行态的任务期待某一消息时(即任务和任务之间的数据传递),该任务将丧失对CPU的占用权而转为等待态,等待时间可由系统设定。若等待时间内该任务收到消息,任务将转为就绪态,否则将被时间管理函数强行转为就绪态。中断发生时运行态的任务将转入中断态,丧失对CPU的占用权。因中断中可能有消息发送使等待态的任务转入就绪态,故中断返回后将首先运行任务调度函数,决定任务状态。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)