期刊目录网

多任务型嵌入式车载终端系统的发展效果

所属栏目:软件开发论文发表 发布时间:2015-02-09浏览量:135   

  0 引言

  实时操作系统μC/OS-Ⅱ具有任务、时间、内存管理等功能,它是基于优先级调度的抢占式嵌入式实时操作系统,其内核可以任意裁减,移植比较简单,并且能够提供各类功能函数如信号量、邮箱队列等,实现多个任务之间的通信,适用于实时性要求较高的场合。本文利用ARM嵌入式处理器,结合GPRS和GPS技术设计了一款嵌入式车载监控终端系统,系统采用μC/OS-Ⅱ 嵌入式操作系统,能满足车辆监控终端的设计要求<sup>[1]</sup>。

  《软件工程师》杂志发表计算机论文评职称,是对从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。当今社会不论什么职业的都需要一个不断学习的环节,软件工程师也一样。虽然软件工程师的工作不同于程序员但是一个软件工程师其前身必定是一个优秀的程序员,软件的开发工具、开发技术在不断地发展。

  1 软件总体设计

  本终端系统硬件主要由中央处理器、GPS 接收机、GPRS 无线通信模块、电源模块等部分组成,实现导航定位、通话、报警和远程通信等功能。

  系统软件采用μC/OS-Ⅱ嵌入式操作系统,软件采用分层设计,具体包括底层硬件驱动层、中间嵌入式操作系统层和应用程序接口层,以及顶层应用层,整个系统体系结构如图1所示。

  软件设计步骤:①进行μC/OS-Ⅱ操作系统的移植;②在此基础上设计各个硬件电路所需要的驱动程序;③进行中断处理程序ISR和各项任务的设计;④利用嵌入式操作系统提供的功能函数创建信号量、消息、邮箱等,最终实现各个任务之间的通信,从而达到控制整个嵌入式系统终端运行的目的。

  1.1 任务设计

  依据嵌入式终端系统所要求的功能,划分如下几个任务:①系统监视任务;②GPS采集任务;③GPS数据处理任务;④键盘输入任务;⑤显示器显示输出任务;⑥串行口收发任务;⑦GPRS通信任务;⑧短信任务以及报警任务。

  另有3个中断服务程序ISR:①定时中断服务程序;②串口接收中断服务程序;③外部中断服务程序。

  1.2 优先级设计

  为了有效利用系统资源,共设计20个不同的优先级,最低优先级OS_ LOWEST_ PRIO 的值设为19,除去系统保留7个优先级外,本系统提供给用户可以使用的优先级个数为12 个[2-3]。

  在系统所有任务设计中,由于涉及到车辆安全,实时性要求比较高,所以把报警任务、GPS任务都设计为与中断服务程序ISR相关联。GPS和GPRS通信任务是比较重要的任务,所以优先级别设计较高,而键盘输入任务和显示输出任务实现人机对话功能,实时性要求不高,优先级可以较低,所以各个任务从高到低的优先级设计如下:

  监控任务⑥—报警任务⑦—串口收发任务⑧—GPS信号采集任务⑩—GPRS通信任务—短信任务—键盘任务—显示输出任务。

  1.3 任务间的同步与通信

  系统任务中,串口中断任务与 GPS任务间的通信是利用消息邮箱实现的,使用OSMboxCreat()函数创建一个邮箱,在串口中断任务程序中通过调用OSM boxPost()函数发送信息到邮箱, GPS任务通过调用函数OSMboxPend()接收邮箱中的消息,邮箱接收到OSMboxPend()函数的消息后,启动GPS任务,GPS任务对内存缓冲数据进行解析和处理,之后将解析处理的数据块放入一个共享缓冲区,然后调用事件标志组发送函数OSFlagPend发送置位信号。

  GPS任务和定时器ISR决定GPRS任务能否进入就绪状态,本设计中利用OS_FLAG_GRP事件标志组启动GPRS任务<sup>[4]</sup>,具体步骤是:①利用OSFlagCrea函数创建一个事件标志组:Flag_Gprs=OSFlagCreat(0x00,&err);②在GPS任务中调用事件标志组发送函数,给Flag_Gprs第1标志位发置1信号:OSFlagPost(Flag_Gprs,0x01,OS_FLAG_SET,&err);③在定时中断中调用事件标志组发送函数,给2标志位发信号量1:OSFlagPost(Flag_Gprs,0x02,OS_FLAG_SET,&err);④在GPRS任务中调用事件标志组等待函数:OSFlagPend(Flag_GpS,0x03,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,&ERR)。

  当两个信号量都为1时,表示GPS 任务和定时中断都有信号到来,由于等待列表中任务的等待类型为OS_FLAG_ SET_AND,经过逻辑与运算后为1,启动GPRS任务,GPRS任务对共享缓冲区的数据块进行处理后打包,向上位监控中心发送定位信息数据;当两个信号量有一个为0时,GPRS任务会一直等待事件的到来。等待时间可以设置,防止因为等待事件没有发生而无限期地等待。GPS任务、GPRS任务和ISR之间通信如图3所示。

  GPS任务生成定位数据块在共享缓冲区,由显示输出任务和GPRS发送任务使用,由于是共享资源,设计了一个互斥信号量,当有任务需要访问共享缓冲区时,必须调用OSMutexPendJ( )获得互斥信号量才能访问共享数据块,访问结束后,通过调用OSMutexPost()释放该信号量,便于其它任务访问。

  2 应用程序设计

  2.1 主程序设计

  系统启动后,首先执行主函数,初始化ARM硬件,然后启动μC/OS-II操作系统,通过OSTask Create()调用函数创建启动任务,最后调用函数OSStart(),执行启动任务。

  2.2 启动任务设计

  启动任务时首先创建各分任务, 然后建立通信工具完成任务间通信,调用OSSemCreate()、OSM-boxCreate()、OSMutexCreate()等相关函数,创建信号量邮箱等通信工具,代码如下:

  void TaskStart(void*pdata)

  {       OS_ENTER_CRITICAL( );           /*关闭中断*/

  //设置uC/OS-II时钟中断向量

  OS_EXIT_CRITICAl。( );               /*开中断*/

  OSStatlnit();      /*初始化统计任务*/

  //系统硬件初始化

  Timerlnit();            /*初始化定时器*/

  LCDlnit();           /*初始化LCD*/

  GPSlnit();            /*初始化GPS*/

  GPRSlnit();           /* 初始化GPRS*/

  //创建其他任务

  Sem=OSSemCreate(0);

  SemX=OSMutexCreate(2,&err);/*创建信号量*/

  Mbox=OSMboxCreate((void*)0);/*创建邮箱*/

  Flag_Gprs = OSFlagCreate(0,&error);

  OSTaskDel(OS _PROI_SELF);     /*删除自己*/

  }

  2.3 其它任务

  本系统任务较多,这里主要介绍GPS采集任务TaskGPS()和GPRS通信任务TaskGPRS()。

  GPS任务采用串口中断方式,首先OSSemCreate函数创建信号量Gpssem= OSSemCreate(0),

  串口中断服务子程序向GPS任务发送同步信号量OSSemPost(Gpssem);

  GPS任务通过调用函数 OSSemPend(Gpssem,0,&error)获取串口中断服务子程序发出的信号量,在获得该信号量之后,对串口数据进行分析处理,将处理后的数据放入一个共享缓冲区。显示任务和GPRS任务通过调用OSMutexPendJ()函数获得互斥型信号量来对共享数据区进行访问,读取数据后,调用函数OSMutexPost()释放该信号量。

  GPRS任务等待读取GPS任务,定时器ISR给事件标志组对应标志位发置1信号,GPRS任务就绪,在收到置位信号后得到CPU控制权,调用相应的函数对共享缓冲区的定位数据进行处理打包,之后向监控中心发送数据信息。

  3 结语

  本文设计的GPR/GPRS 车载终端系统,利用嵌入式操作系统μC/OS-II提供的信号量、邮箱和事件标志组实现任务间通信和同步。实验表明该系统具有性能稳定、可靠性高、成本低、易于扩展等特点,实现了对车辆的实时监控。

  图2 TaskGPS程序流程   图3 TaskGPRS程序流程

  参考文献:

  [1] 李仁波,朱伟兴.基于ARM7的温室灌溉智能测控仪的设计[J].仪表技术与传感器,2009,6(4):18-20.

相关阅读