APP下载

VxWorks下的多串口卡设计

2012-07-31宋桂景崔美英班亚明

无线电通信技术 2012年2期
关键词:多任务队列串口

宋桂景,崔美英,班亚明

(中国电子科技集团公司第五十四研究所,河北石家庄050081)

0 引言

近年来,随着嵌入式计算技术的不断发展,VxWorks嵌入式实时操作系统以高度可裁减的微内核、高效的多任务调度和灵活的任务间通信等优点在目前的卫星通信领域中得到了广泛应用。VxWorks作为一种嵌入式实时多任务操作系统,是指能在确定的时间内执行其功能,并对外部的异步事件作出实时响应的计算机系统。在通信系统内部,管理代理终端设备以及信道设备之间大多是以串口连接,通过串口进行一些控制指令的交互和数据的传输。串口在嵌入式系统中是一类重要的数据通信接口,其本质功能是作为CPU和串行设备间的编码转换器。应用程序在多串口间的通信方式,就是利用实时的多任务灵活调度机制来实现的数据通信的方式。

1 方案设计

在VxWorks的多串口卡设计中,应遵循以下3个原则:

①尽量选用目前通用的嵌入式核心模块;

②选用方便可靠的多串口扩展模块;

③程序设计框架要实用,方便串口信息的增加或删减。

1.1 硬件设计

在VxWorks的多串口卡硬件设计中,采用高集成度小型化的设计思想,选用具有独立功能的嵌入式CPU核心模块——PowerPC 8270处理器模块作为核心单元,外接多串口扩展模块。按照功能类型划分,该种设计方式主要由3部分组成:核心单元、串口扩展单元以及串口转换单元,硬件原理框图如图1所示。

图1 原理框图

1.1.1 核心单元

该mpc8270核心单元具有丰富的通信接口、大量数据传输能力、实时/多任务复杂逻辑和过程处理能力。在8270核心模块上运行嵌入式操作系统和应用软件,实现业务接入、监视控制等功能。该核心模块自带2个低速串口,可直接连接串口转换芯片,一般在系统应用中采用其中的1个串口作为打印串口以监测通信状态。其硬件框图如图2所示。

图2 Mpc8270核心模块原理框图

1.1.2 串口扩展单元

该设计实现串口扩展采用2种方式:采用基于PCI总线接口芯片XR17V258IV可扩展出8个串口,通过可编程逻辑芯片(FPGA)实现串口的进一步扩展。XR17V258IV是基于PCI总线串口的单芯片解决方案,该串口扩展卡可以很容易地扩展为8个串口,而不需要进行硬件的更改和时钟时序调整;该设计还可以利用总线,通过FPGA进一步实现串口的扩展,该方法在可编程逻辑芯片内实现,对于串口的扩展以及管脚的分配更为方便,所以应用更为灵活。

虽然多数学者原则上支持会聚研究和组织结构创新,但在涉及本人或部门利益时往往退缩。因此,探索有效的机构组织形式,在兼顾现有组织文化的同时创建以科学或社会挑战为核心的新型研究组织方式,制定合理的会聚项目评审标准、任务分配制度和绩效考核指标,以促进不同学科背景的科研人员间高效的合作伙伴关系,是科研机构亟待解决的问题。

1.1.3 串口转换单元

串口转换单元可以根据实际需要进行电平转换:TTL/RS232、TTL/RS485、TTL/RS422,以连接外部数据通信接口。

1.2 软件设计

VxWorks实时内核Wind提供了基本的多任务环境。VxWorks操作系统中任务调度算法有时间片轮转、优先级抢占和独占资源。时间片轮转算法依据时间片的分配来为任务分配CPU资源,优先级抢占算法指在任务生成之时都分配有不同或相同的优先级,独占资源式算法指任务独占CPU资源。采用优先级抢占式资源调度算法更贴近实际,在VxWorks中,需要尽快处理的设置为高优先级。而独占资源或时间片轮转的调度方式都是面向同优先级任务的。在该设计中采用优先级抢占调度和时间片轮转调度相结合的方式。

1.2.1 多任务交互

在8270核心模块上运行VxWorks嵌入式操作系统和应用软件,实现实时多串口通信的信息交互。多串口通信中多任务间的交互方式用到主要以下3种:

①共享内存:将需要共享的数据声明为全局变量;

②信号量:提供简单的同步和互斥机制;

③消息队列或管道:任务间传输带有数据的消息(为长度、数目可变的一组数据进行排队)。

1.2.2 通信流程

在利用VxWorks操作系统进行多串口通信,必须在串口通信使用之前向操作系统提出资源申请要求(打开串口),并进行串口配置,通信完成后必须释放资源(关闭串口)。

针对VxWorks的上述通信机制,为每个串口创建1个串口守候接收任务,1个发送任务,同时为每个串口建立1个二进制信号量。建立1个主处理任务的消息队列,同时还需启动看门狗的定时功能。通信数据流程如图3所示。

图3 串口任务数据流程

串口通信在命令状态下对数据的实时性要求要稍低一些,所以串口接收守候任务在命令状态下,接收到数据、搜帧,而后加上标志发送到主处理任务的消息队列,由主处理任务根据标志在分发到相应的处理函数进行处理。而在数据状态下,对数据的实时性要求要高,因此可以通过激活二进制信号量,启动数据状态下的数据接收,此时将数据内容放入环形缓存中,对应接收端有一个数据收指针。

串口数据发送任务获取二进制信号量,对应发送端有发送指针,通过发送指针从对应环形缓存中取得数据发送。

主处理任务可以接收多个串口接收任务和看门狗等其他任务发送过来的消息,根据消息的标志分配给不同的数据处理函数进行处理。

各数据处理函数采用状态机实现业务的处理,就是将一项工作分成若干阶段,明确指定在每阶段应该做什么,以及下一步可以做什么的转移,状态机是一个有向图,由一组节点和一组相应的转移函数组成,节点即工作流中的某个环节,而转移函数对应的是业务逻辑层的某一个对应类中的方法集合,转移函数返回“下一个”节点。此种处理方式可以方便地增加状态信息的处理。

2 关键技术

2.1 实时处理

在实时通信应用中,对时间的处理是至关重要的。需要将操作系统中的时间片与现实时间联系在一起,函数接口sysClkRateGet用于获取每秒产生的时间片数量,时间片函数taskDelay具有延时和任务调度的功能,任务在调用了taskDelay后,会被系统放置在等待队列中,此时CPU资源被让出,开始执行就绪队列中的下一个任务,当系统核心在调度时发现延时完成后,该任务会被放置在就绪队列末尾等待CPU资源,此种调度方式会导致定时不准确。看门狗计时可以提供比较精确的计时,定时时间一到,所安排的任务将以中断级别执行,会打断大部分的任务执行。看门狗计时方式比taskDelay消耗了更多的系统资源,但更精确,可以用于延时、计时和定时。

2.2 模块化设计

该设计中,采用模块化的思想,主要由2个方面来体现。

①数据处理函数模块化:因为同一个物理串口可以根据实际需要连接不同的串口设备,所以在实际设计中可以按照实际应用分为不同的数据处理函数来处理;

②函数状态模块化:采用状态转移来实现不同状态的数据通信。在不同的状态可以通过消息队列接收不同的消息来处理。此种数据处理方式扩展和分析问题都很方便,可以根据需要增加某个函数的处理,同时在数据状态处理中,既可以根据需要增加1条消息的处理,又可以根据需要增加1个状态的处理。

3 测试结果分析

在该电路设计中,核心模块通过PCI总线接口芯片XR17V258IV扩展出8个串口,通过可编程逻辑芯片FPGA扩展出4个串口,共12个串口,其中6个连接数据终端设备(可以连接计算机终端),6个连接数据通信设备(可连接调制解调器Modem)。

利用计算机自带的通讯工具—超级终端进行通信测试,打开超级终端,设置通信速率,通过信道Modem向对端发起呼叫,可测试呼叫成功率(测试命令状态下的通信),以及数据通信中报文发送成功率(测试数据状态下的通行,其中涉及到数据流控的处理)。测试结果如表1所示。经过多次呼叫和数据通信,测试结果满足实际要求。实际数据通信中需要考虑信道状态是否良好。

表1 通信测试结果

4 结束语

该串口卡设计综合考虑了系统中多任务程序的设计及任务间的通信机制,该设备已在某工程中应用,满足系统对各个任务实时性的要求。合理的通信机制可以优化整个系统的性能,提高了CPU的利用率和软件效率。在嵌入式实时操作系统中使用串口通信,不仅可扩展嵌入式设备通信能力,而且可扩大其应用范围。

[1]张扬,于银涛.VxWorks内核、设备驱动与BSP开发详解[M].北京:人民邮电出版社,2009.

[2]孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社,2002.

[3]李洪亮,侯朝桢.VxWorks下实时多任务程序的实现[J].单片机与嵌入式系统应用,2008(24):7 -2.

[4]樊争奇.VxWorks操作系统下基于缓冲队列网络通信应用[J].电脑开发与应用,2009,22(3):67 -68.

[5]郭平.VxWorks串口通信程序设计与实现[J].科技信息,2010(11):69 -70.

[6]蒲元远,孙大维.VxWorks下多串口通信设计[J].光电技术应用,2009(4):48 -50.

猜你喜欢

多任务队列串口
浅谈AB PLC串口跟RFID传感器的通讯应用
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于中心化自动加权多任务学习的早期轻度认知障碍诊断
在队列里
丰田加速驶入自动驾驶队列
基于判别性局部联合稀疏模型的多任务跟踪
基于多任务异步处理的电力系统序网络拓扑分析
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索