一种基于向量表的在轨程序上注方法的研究

2013-03-28 01:53朱亚杰王劲强石志成杨明明
电子设计工程 2013年11期
关键词:程序代码子程序应用程序

朱亚杰,王劲强,石志成,杨明明

(北京空间机电研究所北京100081)

随着空间相机的功能、智能化及自主性要求越来越高,星载相机软件[1]设计的复杂程度及可重配置性要求也越来越高,其功能、性能、安全性和可修改性直接影响了系统的可靠性和稳定性[2],可见星载相机软件的可修改性在软件的生命期[3]内具有非常重要的作用,这便客观上需要星载相机软件具有地面干预能力以应对各种可能出现的异常事件。因此,为真正实现相机的星载软件系统的在轨可修改性,使其具有较大的灵活性,进行程序上注技术的研究非常重要的。据报告,NASA和ESA研制的卫星大多具有程序上注能力,英国的SURREY公司将“在轨程序上注,完成系统加载”作为其商业化卫星平台的主要特色,但对具体的实现方法却极少提及[4]。

近几年,国内研制的航天器中不少分系统也逐渐开始采用程序上注技术,也提出了一些实现方法[5],并证明是解决某些在轨问题的有效手段,但在空间相机分系统中的研究极少。针对空间相机软件系统对在轨维护、故障自诊断及重配置等的迫切需求,本文提出了一种基于嵌入式系统平台的程序上注的方法,来研究程序上注技术在星载相机软件系统中的应用。通过该方法的实现,一方面,可根据空间相机在轨运行情况,及时消除软件功能模块的自身故障,提高其可靠性和安全性;另一方面,通过软件在轨重组,利用现有硬件资源,增加或删除软件功能模块,进一步提高空间相机对新的需求的适应能力。

1 程序上注的嵌入式系统硬件平台

为研究程序上注技术,设计了一种基于BM3803+FLASH+SRAM+1553B的嵌入式系统平台,系统由BM3803、FLASH、SRAM、1553B组成,如图1所示。

图1 硬件平台结构框图Fig.1 Structure diagram of hardware platform

本系统采用基于SPARC V8的国产高性能32位微处理器BM3803,时钟频率为0~100MHz,具有8个寄存器窗口;5级流水线;完全的三模冗余、EDAC和奇偶校验;硬件乘/除法器,并且具有丰富的外设,可扩展性极好。

BM3803处理器的抗辐射性能好,总剂量(TID)抗辐能力为100 krad(Si),优于1E-5错误/器件/day的SEU事件,优于70 Mev cm2/mg的抗闩锁(SEL)能力,并且处理事务的速度快、容错设计好、自身具有检错与一位纠错功能以及良好的可扩展性等,使其能够满足各种航天应用的功能和性能指标要求,在航天领域有广阔的应用前景。

FLASH以它的集成度和擦写次数方面的技术优势成为市场主流。对于数据存储器采用读写速度非常快的SRAM,以匹配速度较快的BM3803处理器。考虑到太空粒子的辐射效应,如单粒子翻转(SEU)、电离总剂量(TID)等,分别选择比较成熟的军品AM29LV160D型号的FLASH和3DSR16VS4502型号的SRAM,它们与同类产品相比具有高可靠性和高集成度、功耗低、读写速度快的特点。分别选用三片器件来组成512MB的FLASH空间和1MB的SRAM空间为程序上注提供了足够大的存储资源。

1553B总线具有分布处理、集中控制和实时响应的特点,并且具有极高的可靠性,采用双冗余系统,有两个传输通道(A、B),保证了良好的容错设计和故障隔离,每组1553B总线的A、B总线为热备份关系,通信波特率最高可达2Mbps,在实时性和可靠性方面保证了系统内部的总线通信。

2 程序上注技术的研究

2.1 程序上注的原理

程序上注主要是星载相机软件在运行过程中通过地面人为干预,将需要修改的可执行代码注入到星载计算机的内存中,以替换原来的功能模块,从而改变软件的运行程序以应对各种可能出现的异常。

程序上注主要是分两步来实现的[6]。首先,地面通过通信链路将需要上注的程序代码上传给星务计算机。然后,星务计算机通过星上1553B总线等将这些程序代码下发至相机分系统的存储区,以修改原程序代码。本文重点研究后一个步骤,即相机分系统接收星务计算机上注的程序代码以及后续处理过程。

图2 程序上注的原理Fig.2 Theory of on-board reprogramming

2.2 程序上注的实现

2.2.1 实现方法

本文主要是采用修改向量表的方法来实现程序上注。

修改向量表的方法主要是以子程序(软件模块)为基本的替代单位[6],将所有子程序(包括有可能进行程序上注的子程序)的入口地址放在一个向量表中,软件在调用任何子程序时均是通过调用向量表来获得子程序的入口地址。程序上注时,首先将修改或增加的程序代码(一个或多个子程序)注入到FLASH中的相应位置,然后再修改向量表中的子程序入口地址,使之指向想要调用的子程序的入口地址。

2.2.2 子程序调用机制

程序上注是以子程序为基本替代单位,软件在调用任何子程序时,均是通过向量表来获得子程序的入口地址。向量表是用来存放子程序的入口地址,定义为一个一维指针数组。向量表会为可能上注的子程序预留一定的空间,其大小依据软件设计需要来定义。

向量表需要定义两次,一次是将BootLoader和用户应用程序一起固化在FLASH中的初始化定义,另一次是在FLASH的注入向量表区0x20000起始地址中的定义。上电时,BootLoader会将0x20000处的向量表搬移到初始化定义的位置并覆盖,然后运行主程序并从向量表中获取正确的入口地址。这样能保证每次上电时,向量表的搬移地址不变,以保证BootLoader不变,这也是该方法的的一个优势所在。

图3 向量表的定义Fig.3 Definition of vector table

图3(b)中SubProg2_Mod_Addr是SubProg2_Addr修改后的子程序,SubProg4_New_Addr是新增加的子程序。如果仍需运行SubProg2_Addr子程序,只需要修改向量表,将SubProg2_Addr修改回来并注掉SubProg2_Mod_Addr即可。

该方法是通过向量表来直接调用子程序。如向量表中的定义的子程序SubProg1_Addr、SubProg2_Addr、SubProg3_Addr,则软件中调用这3个子程序的原理如图4所示。

图4 子程序调用流程图Fig.4 Flow chart of calling sub-program

系统上电后,启动引导加载程序BootLoader,将应用程序搬移到SRAM中,PC指针会跳至SRAM的起始地址0x40000000开始运行应用程序,进入主函数找到向量表入口地址,进而判断子程序的入口地址是否不为零,若不为零,进入子程序入口地址,反之继续往下判断。

2.2.3 地址空间分配

1)FLASH存储区

FLASH主要用来存放系统引导加载程序、用户应用程序以及上注的程序等。地址空间为:0x0-0x1FFFFFFF。

图5 FLASH的地址空间划分Fig.5 Address space dipartition of FLASH

图5中,将新向量表统一放在FLASH的起始地址为0x20000的位置,新子程序模块统一放在FLASH的起始地址为0x40000的位置。每个新子程序模块单独存放在FLASH中的注入程序段中,即新子程序1、2依次存放在SA1、SA2段中。只要进行程序上注,向量表就必须修改并且注入到FLASH的0x20000位置,以替换原来的向量表,这样搬移到SRAM中运行的向量表才是更新后的向量表。

由于使用该方法进行程序上注是以子程序为单位,即使子程序中仅仅修改了一个变量,也需要将整个子程序全部重新注入。由于不可知未来将要上注多大代码量的子程序,为了提高代码区的使用效果,暂规定任何一个需要注入的子程序的可执行代码长度不超过32*1 024字。因此在极端情况下,分段注入FLASH的子程序区可以注入29个新子程序。

2)SRAM存储区

SRAM的速度较快,程序会搬移到SRAM中运行,并且向量表总是在所有程序的最后。地址空间为:0x40000000-0x400FFFFF。

新子程序统一搬移到SRAM的起始地址为0x40200000空间。

新向量表替换原来向量表的位置,在SRAM中的0x4000C000起始地址空间。

由于在定义向量表的时候已经给新子程序预留了空间,在替换原向量表时不会存在覆盖后面程序代码的问题。

图6 SRAM的地址空间划分Fig.6 Address space dipartition of SRAM

3 上注数据包的帧格式

相机分系统使用单消息模式接收卫星数管分系统发送的数据代码。上注代码按照每条消息32个字打包,每条消息有3部分组成:包头(消息序号数)、应用程序代码、应用程序代码按位异或和校验位。具体格式如表1所示。

表1 注入数据包帧格式Tab.1 Frame format of reprogramming data package

当上注应用程序代码结束后,卫星数管分系统会向相机分系统发送一个结束字说明上注程序已完成。这个结束字是由标志位、应用程序代码长度、地址位组成。具体如表2。

表2 结束字数据包帧格式Tab.2 Frame form at of ending data package

4 试验验证

在实验室环境中进行了BM3803子程序模块的更新试验,验证使用修改向量表方法来实现BM3803软件的程序上注的可行性与正确性。试验时地检台将SPE-C2.53编译生成的.bin文件经1553B总线注入。如图7所示。

图7 试验模拟Fig.7 Experiment simulation figure

为了便于观察,将子程序A的计算结果作为遥测量返给地检台,同时利用BM3803的板上资源加入亮灯现象。

原现象:运行子程序A,地检台上返遥测量为10,同时6灯亮。

目标:利用修改向量表的方法修改子程序A为A’,注入A’,运行,返遥测量为18,同时8灯亮。

具体步骤如下:

1)将引导加载程序BootLoader与含有子程序A的应用程序一起烧写至FLASH的0x0起始地址空间。

2)从编译生成的.bin文件中提取出向量表B的代码,烧写至FLASH的0x20000起始地址空间,系统上电后,地检台收到的返遥测量为10,同时6灯亮,证明子程序A正确运行。

3)地面修改子程序A和向量表B。修改后的新子程序记为A’,新向量表记为B’。编译含有A’和B’的完整应用程序,验证二者的正确性,并从编译后生成的.bin文件中提前二者的程序代码。

4)对照上述所讲的上注数据包的帧格式将A’和B’进行打包。A’大小为12128字节,分为203条消息来上注。

5)通过1553B总线将打包好的A’和B’传送至BM3803的存储区。程序上注的数据代码要求很高的可靠性,这便利用包头和校验位进行验证。若包头和校验位有一个不正确,均会返回相应的错误给地检台,地检台再做相应的重发处理。

6)注入代码结束后,地检台会发送一个结束字,依据结束字的标志位0x2000和0x4000判断相应的存储位置。A’上注结束后,结束字的标志位为0x4000,会存放在FLASH的0x40000起始地址空间。B’上注结束后,结束字的标志位为0x2000,会存放在FLASH的0x20000起始地址空间。这样便使FLASH中的应用程序得以更新。

7)系统断/上电,初始化BootLoader会将A’搬移到SRAM的0x40200000起始地址空间,B’搬移到原向量表的位置0x4000C000起始地址空间,与未修改的程序组成一完整程序运行。地检台上的反遥测量为18,同时8灯亮。与预期目标一致,证明子程序A’正确的运行了。同时也验证了利用修改向量表方法来实现程序上注的可行性与正确性。

8)考虑到上注过程中的实时性要求,每条消息之间的时间间隔设置为61580最短时间间隔8 μ,使用示波器测得将子程序A’注入BM3803的存储取所需要的时间为106 ms,这个时间完全满足实时性的需求,可以被接受。

本实验验证了使用修改向量表的方法来修改子程序,以替换原来的子程序,完成程序上注的过程。同样,验证了利用该方法来增加新子程序模块、删除子程序等试验,结果是正确的,完全验证了该方法来实现程序上注技术的正确性。

5 结束语

程序上注技术是提高星载相机软件自治性和灵活性的一种有效手段,能够更好地满足星载相机软件功能的自身故障修改,以及对新增功能进行适应性、完善性维护[7,8],是未来星载相机软件的发展方向。我国在这方面的研究还比较少,因而本文的研究有着非常好的应用前景。同时,由于它过多地依赖天地通信[9],上注过程容易被中断并且刚刚起步,缺乏有效地地面检验措施和上天经验,因此急需做进一步的工作。本文是在国产高性能微处理器BM3803的嵌入式硬件平台上进行程序上注的研究,试验证明,这种修改向量表的方法来实现程序上注是合理可行的,能够满足星载相机软件的在轨修改及扩充功能,以提高空间相机的可靠性和适应性,延长其寿命。

[1] Peccia N,Giannini F.XMMInstrument On-board Software Maintenance Concept[J].NASA report,1994(1):984-992.

[2] 朱虹,王海燕.一种星载软件在轨编程功能的设计和实现技术[J].上海航天,2004(1):26-31.ZHU Hong,WANG Hai-yan.The technology of design and realization of on-board programming for AOCS[J].Aerospace Shanghai,2004(1):26-31.

[3] Tai A T,Alkalai L.On-board Maintenance for Long-life System[C]//Proceeding of the IEEE Workshop on Application-Specific software Engineering and Technology(ASSET-98),Los Angeles,USA 1998:69-74.

[4] 高进,顾斌.卫星在轨编程技术研究[C]//中国宇航学会计算机应用专业委员会2004年学术交流会,北京,中国宇航学会,2004:201-204.

[5] 吴国春,钟兴旺,陶晓霞.星载软件在轨重配置中断处理机制研究[J].空间电子技术,2011(2):68-71.WU Guo-chun,ZHONG Xing-wang,TAO Xiao-xia.Interrupt processing technology on On-Board software reconfiguration for satellites[J].Space Electronic Technology,2011(2):68-71.

[6] 张然峰,郝贤鹏,金龙旭,等.空间相机软件在轨重注方法研究与实现[J].光机电信息,2011(6):30.ZHANG Ran-feng,HAO Xian-peng,JIN Long-xu,et ak.Study and Realization on Method of Software in Space Camera On-Board Reprogramming[J].Optics,Mechanics&Electronics Information,2011(6):30.

[7] Ann T T,Kam S T,Leon A,et al.Low-cost error containment and recovery for on-board guarded software upgrading and beyond[J].IEEE Transactions on Computers,2002,51(2):121-136.

[8] Ann T.T,Kam S.T,Leon A,et al.Chau and William H.Sanders.“On-board Guarded Software Upgrading for Space Mission”[C]//Proceeding of the 18th Digital Avionics System Conference,Los Angeles,USA,1999:1-8.

[9] LIU Peng,DAI Guo-jun,FU Ting-ting.Fault-tolerant Onboard Evolutionary Platform for Adaptive Allocation of Hardware and Software Tasks[C]//Proceeding of the 7thWorld Congress on Intelligent Control and Automation,Chongqing,China,2008:107-110.

猜你喜欢
程序代码子程序应用程序
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
计算机网络信息安全未来发展趋势
基于图元装接模式由程序流程图自动生成源代码
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序
简化编程与子程序嵌套的应用
三星电子将开设应用程序下载商店
微软软件商店开始接受应用程序