基于VxWorks的双485口管理系统设计

(整期优先)网络出版时间:2019-09-11
/ 3

摘要: VxWorks嵌入式操作系统具有高效的实时任务管理与调度、任务的同步与通信、内存管理、I/O管理、时钟管理等机制。两个485口在通信速率、工作模式、控制方式上有较大差别且系统死线要求严格。详细介绍了VxWorks下双485口串行通信系统BSP、驱动程序和应用程序的开发过程。基于VxWorks构建的嵌入式串行通信系统实时性好,效率高,可根据硬件进行优化配置;利用VxWorks的I/O系统将驱动程序作为内核过程,设备作为特殊文件处理,解决了工作方式不同的两个485口的驱动程序开发和接口统一问题。

关键词: 通信系统; 嵌入式串行通信

引言

VxWorks是美国WindRiver公司专门为嵌入式微处理器设计的一种高模块化、高性能的实时多任务操作系统,具有很好的安全性、可靠性及系统灵活性[1-2]。该系统要求两个485端口波特率分别为460.8 kb和614.4 kb;工作方式分别为程序查询式和中断驱动式;代写论文握手方式和通信控制方式也完全不具有相对的独立性和“并发性”,而且各个任务根据不同的“紧迫感”应具有不同的优先级。根据以上多方面的要求和特点,基于优先级抢占式的多任务实时操作系统VxWorks是该系统的首选[3]。本文以研制某型训练装备为背景,详细介绍了基于VxWorks的双485口通信系统设计方法和过程。

1 串口通信基本原理串口通信作为最常用的通信方式,用途非常广泛,驱动易于编写,被绝大多数操作系统默认支持。其基本功能是实现和串行设备间的编码转换发送数据时,字节数据经CPU通过通用异步接收发送器(简称UART)转换为串行位,从串行端口发送出去;接收数据时,串行位通过UART被转换为字节数据,并放入缓冲区,由CPU读取。通过对UART的内部寄存器的控制实现字节数据和位数据的转换和通信。通信时,UART按初始化设置,把起始位、校验位和停止位加到来自CPU的8位数据上,然后按设置的波特率把这个二进制位串发送到串行通信线上,如图1所示;同样,UART能自动从通信线上接收串行数据,并取出有效的数据位,然后转换成数据字符存入接收数据寄存器。

2 串行通信软件设计该软件以WindRiver的TornadoII集成开发环境为平台进行开发。包括BSP开发、驱动程序开发、应用程序开发等步骤。2.1 BSP开发BSP(Board Support Packet,板级支持包)是介于底层硬件和上层软件之间的底层软件开发包。它来源于嵌入式操作系统与硬件无关的设计思想[2,4]。操作系统被设计运行在虚拟的硬件平台上,对于具体的硬件平台,与硬件相关的代码都被封装在BSP中。它主要功能为屏蔽硬件,提供操作系统的驱动及硬件驱动。它的主要功能包括:系统引导时,初始化目标机硬件;提供目标系统上的驱动程序,如定时器、串口等[2,6]。开发BSP,主要以目标板CPU的BSP文件为模板,建立工程并修改相关源文件。BSP文件在vx-works/target/config/all和vxworks/target/config/bsp-name文件夹里。其中,all文件夹里的文件是所有BSP的通用文件,bspname文件夹的文件是用户自己定制的BSP文件。该系统采用Pentium CPU,因此以vxworks/target/config/pcPentium文件夹里的文件为模板进行修改,开发过程如下。系统配置在config/all目录包含的文件中完成。需要配置的头文件有target/config/all/configAll.h和arget/config/pcPentium/config.h;需要配置的模块文件有target/config/all/usrconfig. c和target/src/config目录下的初始化模块。配置头文件主要利用定义(#define)和去除定义(#undef)实现。ConfigAll.h是全局配置头文件,包括所有目标系统公用的配置参数默认定义,一般不修改此文件,而在Config.h中重新定义。以配置引导程序为例:该系统开发过程中使用串口(此串口为目标机开发板上的串口)调试VxWorks映像,端口1作为WDB代理通信通道,不设目标机控制台通#define N-UART-CHANNELS 2这样,宿主机和目标机通过一根串口线连接,VxWorks映像文件从目标机软盘上加载,宿主机通过串口来调试目标机上的VxWorks。在config.h中修改如下内容,同时在Makefile里配置ROM起始地址(ROM-BASE-ADRS)、代码段入口(ROM-TEXT-ADRS)、ROM大小(ROM-SIZE)、VxWorks映像加载地址(RAM-LOW-ADRS)和BootROM加载地址(RAM-HIGH-ADRS)。该系统对模块文件usrconfig.c和target/src/config目录下的初始化模块无需作修改[2]。

2.2 串口驱动程序开发VxWorks操作系统有两种方式实现驱动。1)把设备驱动程序作为独立任务实现,直接在顶层任务中实现硬件操作,完成特有专用的驱动程序。2) VxWorks的I/O系统将设备程序作为内核过程实现。这种方式便于实现I/O子系统的层次模型,便于文件系统一起把设备作为特殊文件处理,提供统一的管理、统一的界面和统一的使用方法,并把设备、文件及网络通信组织成为一致的更高层次的抽象,为用户提供统一的系统服务和用户接口。采用这种驱动方式,向上将TTY设备安装到标准的I/O系统中,上层应用通过标准的I/O接口完成对硬件设备的操作,向下提供对实际硬件设备的底层设备驱动程序[7-8。串口1、串口2均采用82C52芯片作为UART。根据上位机的工作方式,端口1采用硬件握手中断驱动方式,有5根信号线:2根数据传输线(TXD、RXD),2根握手线(CTS、RTS)和1根地线。端口2采用软件握手查询工作方式,有3根信号线:2根数据传输线(TXD、RXD)和1根地线。各端口的默认字长均为8位、停止位2位、奇偶校验位1位、端口1默认波特率为614.4 kbps,端口2默认波特率为460.8 kbps。首先构造设备描述符结构体,设备描述符保存了与设备相关联的数据,它必须以设备头(DEV-HDR)结构为开头。由于2个端口的工作方式完全不同,且无法预测数据传输的先后顺序和传输时机,2个端口的数据接收函数必须分开编写,其中uartRecQuery()函数用于端口2的查询工作方式;uartRecData()函数用于端口1的中断握手方式,其优先级高于uartRecQuery()函数。但数据发送函数可以合并,因为对于单处理器而言,是不可能实现真正的多任务并行处理的,即使编写成两个并行任务,也是在处理器的控制下,按时间片轮转执行的。这样不仅不能提高执行效率,反而会因为任务上下文切换造成一定的资源浪费,影响系统实时性。这种情况,更适合采用面向过程的方法对程序进行设计和优化。下面对其进行说明:调用后,其首先检测输入参数是否合法,而后根据端口号选择工作方式(中断或查询),作相应操作,开始发送数据,每发送一个字节检测并等待TBRE(发送缓冲寄存器空)信号变为有效,再发送下一字节,数据全部发送完毕后函数返回。其工作流程如驱动程序开发完成后,在usrConfig.c文件的usrRoot()函数里,调用API函数iosDrvInstall()对以上驱动程序分别进行安装,再初始化设备描述符,并用iosDevAdd()将设备增加到设备列表中,最后将设备置为中断模式。以上操作完成后即可用标准I/O函数操作两个不同的串口设备
2.3 串口通信应用程序设计数据通信按帧进行,帧分为命令帧和应答帧。帧格式为命令帧:命令码长度参数串异或应答帧:应答码长度参数串异或  对于多字节参数,按高字节在前,低字节在后的次序发送。数据采用二进制16位有符号整数数据格式。其中,最高位为符号位,数据为二进制格式。数据传输时,上位机首先发送一个命令帧,包含数据包个数、最后一个数据包的字节数,除最后一个数据包外,每包大小为16 kB。模拟器收到后,回复应答帧并将收到的数据包个数、最后一个数据包的字节数一同发回校验,对帧长度校验无误后开始发送数据。由于传输数据量较大,一般校验方法进行内容误判率高,不能纠错,大多数情况下需要重新发送,非常费时。循环冗余校验法(CRC)由于实现简单,检错能力强,并能纠错,可以较好地解决这个问题。该系统采用CRC16进行校验[9]。3 结论串行通信以其网络连接方便、抗干扰性能好、传输距离远等优点,在嵌入式系统得到广泛应用。本文以某训练装备研制为背景,详细介绍了VxWorks嵌入式操作系统下串行通信系统软件的开发过程。利用了VxWorks的I/O系统将设备程序作为内核过程,设备作为特殊文件处理,解决了不同工作方式下,两个485口的驱动程序开发和接口统一的问题。目前,该系统已交付使用。运行实践证明该通信系统软件设计思路正确,设计方法得当。对于其他嵌入式串行通信系统设计也具有一定的参考价值。

参考文献:

[1] LI Qing[美].嵌入式系统的实时概念[M].王安生,译.北京:北京航空航天大学出版社,2004.

[2] 王学龙.嵌入式VxWorks系统开发与应用[M].北京:人民邮电出版社,2003.

[3] 陈坤,陈志勇,黎湘.VxWorks实时操作系统在相控阵雷达系统中的应用[J].电光与控制,2005,12(4):51-53.

[4] VxWorks programmer’s guide[M].Wind River System Inc.,1999.

[5] 周启平,张杨.VxWorks程序员速查手册[M].北京:机械工业出版社, 2005.

[6] 拉布罗斯[美].嵌入式系统构件[M].北京:机械工业出版社,2002.

[7] 张军.基于VxWorks实时操作系统的串口通信程序设计与实现[J].微计算机信息,2006,22(2-2):98-100.

[8] 张爱卿,唐普英,汪康洪.VxWorks中基于RS485总线的串口通信协议及实现[J].微计算机信息,2006,22(6-2):80-82.

[9] 罗国庆.VxWorks与嵌入式软件开发[M].北京:机械工业出版社,2003.