APP下载

基于BM3803的1553B总线通信软件设计

2019-11-26*

中国空间科学技术 2019年5期
关键词:堆栈工控机时间差

*

1. 中国科学院 安徽光学精密机械研究所,合肥 230031 2. 中国科学技术大学,合肥 230026

在卫星中RT(Remote Terminal,远程终端)接入系统之前,要在地面检测设备上使用其他装置来模拟总线控制端(Bus Controller,BC),按照MIL-STD-1553B总线(以下简称为1553B)协议与此RT进行通信,对其进行一系列检测。

传统的方案是使用工控机搭载1553B_PCI板卡来模拟BC[1-3],但工控机的Windows操作系统并不是实时系统,会有定时不准的情况,使任务的周期偏差超出允许范围。

为了解决这个问题,可以使用FPGA、DSP或单片机以裸跑或者搭载实时操作系统的方式来模拟BC[4-5]。本设计使用BM3803处理器搭载实时操作系统μC/OS-II来模拟BC。选用BM3803是因其在卫星数管计算机中较为常用,与其他航空用处理器如AT697等兼容[6-8],最接近真实的卫星平台工作状态,并考虑卫星器件国产化的需要,不选用传统的AT697等器件。设计框图如图1所示,使用BM3803搭载μC/OS-II,以B61580作为 1553B通信引擎[9],模拟了某卫星的BC,与某RT进行一系列通信任务,以检测此RT的功能,同时用工控机通过串口给BM3803发送指令并显示通信记录。

图1 设计框图Fig.1 Design block diagram

BM3803是基于SPARC V8体系架构的国产32位抗辐射加固微处理器[10-11],具备航天应用场景下所需的功能及性能。其容错设计采用三模冗余、纠一检二的EDAC编解码以及奇偶校验等抗单粒子翻转效应的设计方案,极大程度上保证了可靠性[12-13]。

选用μC/OS-II是按照此卫星总体部门的要求来满足未来任务扩充的需要。它是一个可ROM化、可裁剪、抢占式、实时多任务操作系统,在航空电子领域通过了美国航空航天管理局(FAA)的安全认证,可以用于飞机、航天器等性命攸关的系统中[14-15]。μC/OS-II已经大范围应用于SPARC构架的航空航天用CPU,如TSC695F等,其可靠性与实时性经过了长时间的理论与实践验证[16-18]。

本文首先给出软件的整体结构;然后将μC/OS-II移植入BM3803;再利用B61580和BM3803的硬件特性,在用户任务中加入各种检验、纠错机制;之后按照某卫星星上软件高层通信协议布置用户任务,对比了BM3803+μC/OS-II与Windows+1553B_PCI板卡这两种方案的执行情况;最后得到结论,BM3803+μC/OS-II的实时性满足此卫星高层通信协议的要求,解决了Windows+1553B_PCI板卡方案定时不准的问题。

1 软件结构

本设计的软件结构如图2所示,分为三部分:用户任务、操作系统与硬件。首先在操作系统中,开发与硬件相关的内外部设备驱动。然后依据SPARC V8构架与BM3803寄存器性质,开发板级支持包,以提供操作系统所需的时钟节拍和堆栈段等来完成多任务的实时调度。最后在用户层面上使用操作系统所提供的接口和功能函数布置任务。以这样的软件结构,可以实现将用户任务与硬件的关联度降到最低,方便创立任务的同时也极大减少了与硬件有关的设计错误。

在实际运行中,引导程序被固化在PROM中,操作系统被固化在FLASH中,一般情况下不会轻易改动。而用户层软件被烧写到另一段FLASH中,可以由用户通过对此段存储器的改写来实现用户任务的在轨更新,这种“可在轨更新”的性质可以在用户任务段代码出现问题时重写代码,并提供增删任务的功能,提高了软件可靠性的同时增强了软件的灵活性。

图2 软件结构Fig.2 Software structure

2 实时操作系统移植

2.1 堆栈段设计

在BM3803中运行μC/OS-II,相当于操作系统工作在单CPU的情况,各个任务轮番占用CPU与寄存器组,故在任务切出的时候要将当前任务的运行情况(寄存器组的值)保存到自己的堆栈段中,任务切入时再从此堆栈中将运行情况恢复到寄存器组中。根据SPARC V8架构和任务需求,设计堆栈段如表1所示。SPARC V8标准定义的程序堆栈由堆指针和栈指针组成,由高地址向低地址生长,故在堆栈段设计中将任务地址放在最高端,以最先取出。接着放置PSR、WIM和TBR这3个对BM3803的运行最重要的内部寄存器。BM3083属于32位SPARC,堆栈数据类型需要定义为32位整型。经过实际运行证明此设计可行。

2.2 定时器中断处理

定时器中断的工作设计如图3所示。实时操作系统是基于时间切片工作的。中断之间的时间间隔,即为时间切片的长度,其值取决于不同的应用场合,一般为10~200 ms。因为本文中的用户任务的周期均为百毫秒和秒级,故取定时器中断时间间隔为100 ms。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。此中断的服务函数主要是给每个用户任务控制块中的时间延时项减1(如果此项不为0),当此项为0时,此任务便进入就绪态。BM3803提供了2个定时器,本设计中使用TIMER1实现100 ms定时:主频80 MHz,预分频器计数寄存器、预分频器重载寄存器、计数寄存器和重载寄存器分别设置为0x0000004F、0x0000004F、0x0001869F和0x0001869F。在系统初始化的过程中,定时器中断的使能必须要发生在多任务调度开始(OSStart()函数)之后。

表1 堆栈段设计

2.3 任务切换

任务切换由软件陷阱(ta 80)触发,在对操作系统初始化之前就要将此陷阱与任务切换函数关联起来。此函数涉及对处理器内部寄存器的操作,故必须放置在OS_CPU_A.asm文件中使用汇编语言编写。软陷阱指令会将一些处理器寄存器(比如返回地址和处理器状态字)压入到当前任务的堆栈中,并进入任务切换函数执行任务切换。

这里对堆栈的压入和弹出都必须要严格按照第2.1节所述的堆栈结构来操作。任务切换的流程如图4所示。图中的“保存上下文”指的就是将当前任务的运行状态(寄存器组的值)按设计好的堆栈结构压入栈中,然后从就绪表中找到已经处于就绪状态的优先级最高的任务,将此任务设定为当前任务,并将其运行状态一一按照堆栈结构反向弹出给相应的寄存器,以恢复上下文。由于1553B通信任务的特殊性:通信系统中只有一套1553B总线,所有用户任务都要共同这一套总线,不可以在一个任务没完成的时候将其打断,故本设计中屏蔽掉了中断级任务切换。

图4 任务切换Fig.4 Task switching

2.4 用户任务

设置用户任务之前要对操作系统初始化。在操作系统初始化函数的开头留有钩子函数,BM3803内外部设备的初始化均在此完成,如串口等。

μC/OS-II最多可以支持63个用户任务,每一个任务都定义成一个单独的函数,由OSTimeDly()函数控制执行周期。如建立2个用户任务“周期500 ms返回矢量字”和“周期2 s系统同步”,可按图5所示步骤建立。由于设定操作系统的切片时长为100 ms,故在以上两任务后的延时分别为5个节拍和20个节拍。

图5 用户任务的设置Fig.5 User task settings

在执行用户任务的过程中,增加了以下设计来增强软件可靠性:

1) 在未使用的ROM区,每间隔1 kbyte的存储空间设置1~3个软件陷阱;

2) 对BM3803未使用的中断向量一一设置陷阱,引导被触发的未使用中断;

3) 每次通信后详细检查B61580的块状态字和状态字。

3 试验

按照某卫星星上软件高层通信协议设置8个用户任务如表2所示,分别考察BM3803+μC/OS-II和Windows+1553B_PCI板卡这两种方案的完成情况。

表2 用户任务

用户任务说明:

1)表中“NULL”表示此任务为非周期任务。

2) 若任务4返回的数据字为0x0002,则触发任务6。

3)将对时间要求最严格的任务1的优先级设置为这些任务中最高的,当有多项任务同时就绪的时候,优先级高的优先执行。

4)通过任务8长抱环测试可以检测系统工作是否正常:BC在“长抱环测试”任务中以广播的形式发给RT一个数据字,RT将其按位取反。之后BC再在“长抱环校验”任务中获取被RT处理后的数据字,经过比较后若正好按位相反,则代表此次测试成功。

5) 每次执行任务1后都要切换一次1553B通信通道,可在每次通信的块状态字中检查出。

6) 本文中未加进制标注的数值均默认为十进制。

3.1 BM3803+μC/OS-II

此方案结构如图6所示。BM3803搭载μC/OS-II作为BC,同时通过一路串口在工控机上的“串口助手”打印通信记录,再通过另一路串口由工控机向BM3803发送任务2、3。

图6 BM3803+μC/OS-II方案结构Fig.6 Structure of the BM3803+μC/OS-II solution

打印的通信记录如图7所示。图中“XXXXXX”表示当前任务不包含此项。每隔500 ms串口工具会给出时间戳显示绝对时间。各个任务之间的相对时间可以由“时间标签”计算得出,时间标签的时间分辨率设定为16 μs,即时间标签最大值代表的时间为:

0xffff×16=1 048 560 μs

首先根据上述“用户任务说明”以及“1553B通信协议”查看图7中数据的含义,得知所有用户任务的执行情况均正常。

图7是在每个任务完成之后由BM3803通过串口打印到工控机串口助手而来的,在实际的通信中并不需要这个打印的动作,故在计算周期任务的周期偏差的时候需要把串口打印的时间去掉以还原实际情况。每个任务打印一行,各个任务的打印长度均一致:24个中文字符(Unicode码)和48个英文字符(ASCII码)。

图7 BM3803+μC/OS-II方案的通信记录Fig.7 Communication record of BM3803+μC/OS-II solution

串口通信模式设置为8个数据位,没有校验位,1个停止位和1个起始位,故每个任务打印的位数为:

(24×2+48)×10=960

串口通信使用的波特率为115 200 bit/s,所以每行打印耗时为:

1) 以时间戳为21:51:21:027和21:51:21:527的两次任务1为例。两次任务1的时间差为:

(0xEA5C+0xFFFF-0xF636)×16=

1 000 016 μs

查表2可知:这两次任务1的时间差与规定的周期相差16 μs,在此任务所允许的周期偏差范围100 μs内。

2) 以时间戳为21:51:20:027和21:51:20:527的两次任务6为例。两次任务6的时间差为:

(0xFD1F-0x7E66)×16=519 056 μs

而21:51:20:027中的任务6之前有1次打印动作,21:51:20:527中的任务6之前有3次打印动作,故将时间差减去2次打印的耗时:

519 056-(8 333×2)=502 390 μs

查表2可知:这两次任务6的时间差与规定的周期0.5 s相差2 390 μs,在此任务所允许的周期偏差范围10 000 μs内。

3)以时间戳为21:51:18:527和21:51:19:027的两次任务4为例。两次任务4的时间差为:

(0x87F9-0x104E)×16=490 160μs

而21:51:18:527中的任务4之前有1次打印动作,21:51:19:027中的任务4之前无打印动作,故将时间差加上1次打印的耗时:

490 160+(8 333×1)=498 493μs

查表2可知:这两次任务4的时间差与规定的周期0.5 s相差1 507 μs,在此任务所允许的周期偏差范围10 000 μs内。

以相同的计算方式可计算出各个任务的周期偏差情况,均在所允许的偏差范围内。

3.2 Windows+1553B_PCI板卡

此方案结构如图8所示,以地面检测平台的“1553B_PCI板卡软件”为控制和显示的工具,软件界面如图9所示。其中按钮“start”启动定时器功能,开始执行各个周期任务。使用按键 “inject”和“instruction”执行任务2和任务3。

图8 Windows+1553B_PCI板卡方案结构Fig.8 Structure of windows+1553B_PCI board solution

首先根据上述“用户任务说明”以及“1553B通信协议”查看图9中数据的含义,得知所有用户任务的执行情况均正常。

本次试验所用工控机的处理器为4核i5-4570,其工作频率为3.2 GHz,故打印的时间可以忽略不计。1553B_PCI板卡的时间标签的时间分辨率为固定的1 μs,其采用双字存储,故可表示的最大时间为:

图9 Windows+1553B_PCI板卡方案的任务测试Fig.9 Communication record of Windows+1553B_PCI solution

0xffffffff×1 μs=4 294 967 295 μs

以时间戳为14:4:8:844和14:4:9:858的两次任务1为例,两次任务1的时间差为:

(0x00b85230-0x00a8d91d)×1 μs=1 014 035 μs

查表2可知:这两次任务1的时间差与规定的周期相差14 035 μs,超出该任务所允许的周期偏差范围100 μs。

以时间戳为14:4:10:779和14:4:12:791的两次任务7为例,两次任务7的时间差为:

(0x00e513c4-0x00c6602a)×1 μs=2 012 058 μs

查表2可知:这两次任务7的时间差与规定的周期相差12 058 μs,超出该任务所允许的周期偏差范围10 000 μs。

4 结束语

按照如上的试验方法和计算方式,统计计算多次的平均结果如表3所示。由于除任务1之外的其他周期任务的偏差上限都相同,故统一计算。

表3 周期偏差结果

由图7、图9和表3中的数据可知,BM3803+μC/OS-II的方案可以严格按照卫星星上高层通信协议中的时间要求完成任务,保证各个任务的周期偏差小于规定的偏差,并且实时性优于Windows+1553B_PCI板卡方案。尤其是对于任务1广播时间码这项对实时性要求最高的任务,Windows方案的平均偏差在14 ms左右,严重超过规定范围,而BM3803方案可以保证平均偏差只在10 μs左右,大大提升了实时性能。

本文基于BM3803的1553B通信软件的设计,改善了工控机搭载1553B_PCI板卡的方式出现的定时不准问题,可良好稳定地完成任务。将μC/OS-II应用在BM3803上也使得时间管理、任务调度等功能更加可靠,使得任务的维护和扩展更加灵活方便。本设计为后续应用程序的开发和扩充打下了良好基础,并为未来B3803的设计提供了参考。

相比于传统的1553B_PCI板卡方案,本文所构建的实时性更强的卫星数据仿真平台,接近真实地模拟了星上BC的动作,在地面检测平台上对卫星中的RT进行了一系列检测,并将所有通信任务的信息反馈到工控机上进行显示、记录和分析,保证了地面检测平台的有效性。

猜你喜欢

堆栈工控机时间差
量子定位系统中符合计数与到达时间差的获取
基于生成语法的句子理解机制
基于BP网络的GIS局部放电声电联合检测故障定位方法
Windows栈缓冲区溢出攻击原理及其防范
立体声音乐节目后期制作中声像定位的探讨
缓冲区溢出安全编程教与学
普通台机替代工控机成功应用
厘米级室内无线定位方法研究
印刷网络化解决方案中工控机系统的设计与实现
控制舱测试系统及其BIT设计