实时操作系统uC/OS—II串口通信的设计与实现
2017-07-12夏鑫
夏鑫
摘要: 随着电子技术、信息技术和通讯技术的快速发展以及互联网的广泛应用,计算机产品开始逐渐转移到信息产品,而硬件技术的发展促进了计算机往微型化和专业化的趋势发展,人们对于信息产品的功能要求越来越高,嵌入式系统开始逐渐走入人们的视线,实时操作系统的移植也成为计算机这个行业的热点。本文选用能够管理多任务的嵌入式实时操作系统uC/OS-II,以及嵌入式网络协议Lwip,该协议能够实现嵌入式设备与互联网之间的连接,分析了以微处理器LPC2365、闪存FLASH、LED、蜂鸣器和PC为硬件平台嵌入移植了uC/OS-II嵌入式实时操作系统的相关设计方法,以实现在此嵌入式系统上进行主从结构帧结构传输的串口通信。
Abstract: With the rapid development of electronic technology, information and communication technology, and the wide application of Internet, computer products gradually transferred to information products, with the development of hardware technology and requirements of people to the improvement of information product functional, embedded system has become hotspot in this field, at the same time in the field of computer itself, miniaturization and specialization is a new trend of development. This paper expounds on the ARM7 microprocessor LPC2365 transplant uC/OS-II main content and the realization of the related function of design method. Choose embedded real-time operating system uC/OS-II that manage multiple tasks, and used embedded network protocol called Lwip to implement the connection between embedded devices and the Internet. With microprocessor LPC2365, FLASH, LED, buzzer and PC as the hardware platform, transplant the embedded real-time operating system uC/OS-II, and on the embedded system realize the master-slave structure frame structure transmission and serial communication function.
關键词: 嵌入式系统;uC/OS-II实时操作系统;Lwip协议;LPC2365
Key words: embedded system;uC/OS-II real-time operating system;Lwip protocol;LPC2365
中图分类号:TP316.8 文献标识码:A 文章编号:1006-4311(2017)19-0090-04
0 引言
近年来,随着计算机技术中、网络通信技术及微电子技术的快速发展,嵌入式技术这门新兴学科开始进入研究人员的视线并且在其相应的技术支持下所衍生的信息产品逐渐向微型化和智能化发展。在人们的日常生活中随处可见嵌入式设备,比如手机、MP3,单片机的提出对于用于交通、科技、生活、工业生产和通信等的各种各样的产品通过内嵌集成电路芯片来优化其性能,基于此提出了嵌入式系统的概念,而这些内置芯片的产品初步具备嵌入式的应用特点。而“嵌入式系统“这个概念源于80年代初的微型机时代,主要适用于某些对应用系统成本、功能、功耗和体积要求很苛刻的专业计算机系统,基于计算机技术、围绕应用并且能够实现软硬件裁剪而提出。凭借成本低廉、设备体积小、可靠性高等特点,嵌入式系统已经渗透到我们生活中的各个领域。
随着人们日益增长的物质文化需要,对嵌入式系统功能的要求也越来越高。这就意味着嵌入式操作系统单一任务传统模式己经远远不能满足需求,嵌入式必然的发展趋势是对操作系统的引入。移植了实时操作系统的嵌入式系统具有的实时任务管理、合理的内存分配、操作系统内核的时钟管理和完善的任务进程间的任务同步通信机制等优点推动其进一步发展。计算机网络的快速发展使得网络技术在各个领域都有所应用,包括航空、工业、农业、教育、医学等。在这些领域中网络成为重要的主导因素,全球网络化时代是必然趋势,嵌入式系统也逐步朝着网络化方向发展。
实时操作系统uC/OS-II作为一个微内核,具有代码量小、实时性强、支持的处理器多等优点,使得其在国内外嵌入式领域得到了广泛的应用[1]。在嵌入式系统资源受限的前提下,开发的轻量级的网络协议Lwip能够很好地适用于该系统,能够很好地减少系统的RAM运行、支持TCP/IP协议、操作系统模拟层、网络接口和API接口等。
1 设计的基本原理
ARM7处理器LPC2365芯片具有多个串口资源,这些串口资源用于实时接收数据,这些数据包括数据采集板数据、普通性能GPS接收机数据和高性能GPS接收机数据,按要求对采集板数据与普通性能GPS数据进行组帧,根据所收到的互斥型信号量,存入发送数据队列中,这个队列属于FIFO类型;接收的高性能GPS接收机数据存入同一队列;当已经有数据存入该发送数据队列时,为进行数据的发送,需要通过一个二值信号量来启动串口发送任务,在发送完一帧数据后结束发送过程[2],如图1所示为数据流向示意图。
针对串口接收任务、串口发送任务、组帧任务等不同功能创建不同的任务,这里应用程序是基于嵌入式实时操作系统uC/OS-II编写完成的。
2 设计完成的工作
2.1 数据以帧结构传输
对于固定长度的短字节帧数据,通过设置合适的字节触发深度,一次中断完成数据接收任务;对于变长的长字节帧数据,则通过多次中断和等待延时的方法判断数据稳定并完成帧数据的接收;对于大量数据的接收和发送采用建立FIFO数据队列的方法。通过这些措施较好地完成了多串口较大数据量的通信任务。
2.2 uC/OS-II的串口通信
通过数据信号线、控制线和地线等在计算机和外设间进行按位传输数据的通信方式称为串口通信,这种通信方式具有使用数据线少节约成本的优点,但相对于并行传输其传输速度低[3]。
串口是计算机上一种非常通用的设备通信协议同时也是仪器仪表设备通用的通信协议,除了笔记本电脑以外,大多数计算机以及很多GPIB兼容的设备包含基于RS-232的串口,同时,在获取远程采集设备的数据方面,串口通信协议也起到非常重要的作用。
2.3 主从结构
主从式结构是一种多用户结构,其特点是单主机带有多终端、数据易于管理与维护,但是当终端用户数目增加到一定程度后,主机会因为任务过分繁重使系统性能大幅度下降[4],而且当主机出现故障时,整个系统都会处于瘫痪状态,所以系统的可靠性不高。
在主从式结构中,主机完成所有的处理任务,连接主机的终端各个用户共享数据资源,并发地存取数据,这得益于主机上存放的数据库系统,该系统主要包括数据、应用程序和DBMS。
3 硬件设计
主控CPU是ARM7处理器LPC2365,在嵌入式实时操作系统uC/OS-II中F1ash存储器和SRAM用于运行和存储相关的应用程序,全双工UART串口用于与数据采集板、GPS接收机等进行通信[5]。
高性能GPS接收机的数据量占空比高达85%,输出数据时其数据量为305字节/帧、比特率为57600 bps、速率为20Hz,为完成数据的传输任务,考虑到还需要下传其他参数信息,应选用波特率更高的数传模块。
EL806数传模块拥有先进的调频扩频技术,这款由美国GE MDS公司生产的数传模块在无线数据通信上具有较好的可靠性、完整性和较强的纠错能力,硬件系统框图如图2所示。
4 软件设计
4.1 实时操作系统 uC/OS-II的移植
uC/OS-II作为一种完整的占先式实时多任务内核,具有可移植、可固化、可裁剪和源代码公开等特点,它可移植到包括8位、16位、32位单片机、DSP以及64位的微处理器等多种不同架构的微处理器上[6]。
为了将该操作系统移植到相应CPU体系结构中以确保该系统能在原先准备的硬件环境中运行,进行源代码的编写和修改,按照相应的移植步骤就可以得到移植的操作系统[7]。
4.2 应用程序的编写
编写应用程序时严格遵守其编程规范才能成功使用uC/OS-II嵌入式实时操作系统,任务间的数据交换主要使用二值信号量和互斥型信号量,重点在于编写串口中断服务程序和数据收发任务。
通信帧数据是否为固定长度是在编写串口中断服务程序需要关注的问题。本应用程序的中断服务程序以及任务编程所需的数据全部通过串口1进行传输。该串口的接收和发送的数据帧长度固定且较短,传输过程比较简单;而串口0和2接收到的数据帧需要考虑是否为触发深度的整数倍,故其长度较长且不固定。
当通信帧的长度正好为中断触发深度的整数倍时,数据传输时数据帧全部发送完毕后,这个时候只能触发正常的接收中断。由于通信帧的长度不定,此时可在等待信号量函数设置超时参数,当数据接收完毕时,所接收的数据是稳定不变的状态。具体可通过以下代码来识别中断服务程序和接收数据任务程序片段[8]:
在一个全局数组中存放串口0和串口1接收到的数据,结合硬件系统框图和所要完成的任务分别创建串口0和串口1接收任务,在全局数组的相应位置上放置两个接收任务接收到的数据。这两个串口接收到的数据组帧发送出去的速率是每秒一帧,而普通性能GPS接收机与串口0相连且每秒发送一帧数据(即串口0的接收速率是每秒一帧),则可以由串口0接收任务中的信号量来控制啟动发送帧数据的组装和写入队列任务,这样下传的GPS帧数据因计时误差而产生的跳变或重复就可以避免。
前面我们提到在同一发送数据队列中需要存入串口0及串口1接收到的数据组帧和串口2接收到的高性能GPS接收机数据,这里涉及到发送队列的共享资源分配问题。通过互斥信号量存入发送数据队列中,这里主要利用了互斥信号量能够处理优先级反转,实现互斥访问发送队列的共享资源,此时所有需要访问这个共享资源的任务的优先级低于互斥访问发送队列的优先级继承值,从而完成数据的存入。当这两个串口任务将接收到的数据写入数据队列时,需要获取互斥型信号量以完成对数据队列进行互斥访问,为了不影响其他任务对该队列的共享资源的使用,在串口写完数据后应立即释放信号量。
针对接收的关键指令或低优先级任务进行响应,在主函数main()中建立串口3接收并优先执行的数据任务。在其它任务被创建的过程中,系统会始终等待串口3接收数据,判断接收到的数据并执行指令。以下是该部分的程序代码[9]:
5 总结
因为笔者对于嵌入式非常感兴趣,研一时候主要学习ARM和STM32,为了对自己的研究方向有所帮助,所以笔者选择了这门实时操作系统课程,在这门课程上学习到很多有意思的知识,不同于本科学的单片机或者DSP那么简单易懂,比如消息邮箱和消息队列的知识,然后就是实时操作系统强调实时控制需要定时,重难点主要是对于优先级的理解然后调度算法和调度方式,总的来说,学习实时操作系统这门课程给予笔者今后的研究很大的启发。
最后实验结果显示,在ARM7处理器LPC2365芯片移植实时操作系统uC/OS-II后再进行多串口通信可以减化硬件设计,通过在该嵌入式系统中编写相应的多串口通信应用程序,提高系统的实时性要求并且运行稳定可靠。
参考文献:
[1]陶德桂,王成军,刘关心.LPC2365的μC/OS-Ⅱ下多串口通信编程[J].单片机与嵌入式系统应用,2012(08):26-29.
[2]余晓光.基于实时操作系统FreeRTOS的Lwip协议的移植研究[D].昆明理工大学,2013.
[3]洪伟.基于ARM的GPS接收机导航解算模块设计[D].哈尔滨工程大学,2010.
[4]Jean J Labrosse. 嵌入式实时操作系统uC/OS-II[M].邵贝贝等译.二版.北京:北京航天航空大学出版社,2006.
[5]周立功.ARM嵌入式系统基础教程[M].北京:北京航天航空大学出版社,2006.
[6]周立功.ARM嵌入式系统实验教程(一)[M].北京:北京航天航空大学出版社,2005.
[7]赵娟,曾强,李改利,等.基于ARM的远距离便携式无线传输系统[J].单片机与嵌入式系统应用,2011,11(8):25-27.
[8]胡宏灿,喻涛.uC/OS-II下的ARM7中断过程分析及优化方法[J].单片机与嵌入式系统应用,2010,10(9):77-78.
[9]周航慈.基于嵌入式实时操作系统的程序设计技术[M].二版.北京:北京航天航空大学出版社,2011.
[10]李寧.ARM开发工具Realview MDK使用入门[M]. 北京:北京航天航空大学出版社,2008.
[11]庄严,王晓,汤建敏.嵌入式C/C++系统工程师实训教程 [M].北京:清华大学出版社,2011.
[12]周立功.ARM微控制器基础与实战[M].二版.北京:北京航天航空大学出版社,2005.