一种针对dsp平台航天器软件的动态在轨维护方法

文档序号:10654175阅读:635来源:国知局
一种针对dsp平台航天器软件的动态在轨维护方法
【专利摘要】一种针对DSP平台航天器软件的动态在轨维护方法,主要是依据航天器上软件设计时预先设定的钩子函数,编写相应的在轨维护源代码,通过编译链接文件(CMD文件)指定在轨维护注入区,修改编译生成的二进制码的返回地址,使在轨维护注入码执行完毕后能够正确返回原在轨软件继续执行。本发明方法可以避免静态在轨维护方案中系统需要重新加电的问题以及动态在轨维护方案中受限于存储空间和带宽无法进行大规模软件整体更替的问题,实现了航天器在轨DSP软件补丁型的模块级在轨维护功能。
【专利说明】
-种针对DSP平台航天器软件的动态在轨维护方法
技术领域
[0001] 本发明属于航天器在轨维护领域,设及一种针对美国德州仪器(TI)公司 TMS320C6000系列DSP平台航天器软件的动态在轨维护方法。
【背景技术】
[0002] 航天器软件的在轨维护能力是保证航天器长寿命不可或缺的手段,与硬件的冗余 备份相比,运种方法更经济、灵活。通过软件在轨维护来提高航天器的寿命和可靠性的方式 越来越受到重视。
[0003] DSP(数字信号处理器)在航天领域的应用越来越广泛,DSP软件的可维护性直接影 响了系统的稳定性。目前,在航天领域针对DSP处理器软件的在轨维护方法,文献《制导与引 信》2011年第32卷第4期发表的"一种星载DSP软件的在轨编程方法"中,提到通过修改引导 启动软件代码的方式实现在轨软件的升级。该方法设计思想可行,但前提条件是星载软件 本身存储在FLASH等可写存储器内,并且在轨维护软件的启动需要系统重新上电加载,属于 静态的在轨维护方案。由于系统重新加电不利于系统控制的连续性,因此静态的软件在轨 维护方案在实际的航天器控制系统软件设计中并不适用。而且当前航天器软件主要是固化 在PROM存储器中,在轨时无法改写,因此DSP软件的在轨维护方案需要采取动态在轨维护。
[0004] 针对DSP软件动态在轨维护,仅在文献《单片机与嵌入式系统应用》2011年第11卷 第4期发表的"DSP空间相机控制器的在轨程序注入"中有所设及,但是该文献描述的DSP软 件在轨重注方法面向的是TMS320VC33系列DSP处理器,且该方法实现的在轨维护属于在轨 程序替代型,即在轨维护程序启动后,将完全替换掉原在轨软件。由于一般航天器软件的规 模比较大,在实际的在轨维护时,该替代型维护方法往往受限于航天器预留的在轨注入空 间和星地之间数据上行注入带宽,具有一定的局限性。

【发明内容】

[0005] 本发明解决的技术问题是:克服现有技术的不足,提供了一种针对DSP平台航天器 软件的动态在轨维护方法,避免静态在轨维护方案中系统需要重新加电的问题W及动态在 轨维护方案中受限于存储空间和带宽无法进行大规模软件整体更替的问题,实现了航天器 在轨DSP软件补下型的模块级在轨维护功能。
[0006] 本发明的技术解决方案是:一种针对DSP平台航天器软件的动态在轨维护方法,包 括如下步骤:
[0007] (1)依据在轨维护任务需求,选取距离航天器上DSP软件所需维护的功能最近的具 有钩子的函数作为在轨维护原函数;所述的DSP为TMS320C6000系列DSP;
[000引(2)按照航天器注入区地址,修改原航天器上DSP软件的链接命令文件,设定新的 段空间;
[0009] (3)在原航天器上DSP软件的编译环境下,根据在轨维护需求编写相应的在轨维护 源代码,并通过预编译伪指令将相应的在轨维护源代码指定到链接命令文件新增的段空 间;
[0010] (4)在原航天器上DSP软件的编译环境下,将原航天器上软件源代码与在轨维护源 代码进行联合编译,生成.out目标文件,然后由.out目标文件进而生成.1 St链接文件,在 .1st链接文件中提取出在轨维护源代码生成的指令码片段;
[0011] (5)在所述指令码片段中,找到函数返回的对应汇编码指令("B B3"),并判断所述 的指令码片段是对在轨维护原函数的整体替换还是部分替换,如果是采取在轨维护原函数 的整体替换方式,直接转步骤(7);如果是采取在轨维护原函数的局部替换方式,则转步骤 (6);
[0012] (6)梳理.1st链接文件中在轨维护原函数编译生成的汇编码指令,在被替换的汇 编码指令中找出满足如下条件的寄存器和堆找地址:被赋值且后面保留的汇编码中使用该 寄存器和堆找地址,并且使用前未被赋予新值;将满足上述条件的寄存器和堆找地址中的 值进行变更,使其和原航天器上DSP软件一致;
[0013] (7)在所述汇编码指令("B B3")中,将函数返回地址寄存器B3的值修改为在轨维 护原函数中的返回目标地址;
[0014] (8)将修改完毕的在轨维护汇编码指令进行编译后,生成最终注入的在轨维护二 进制指令码,通过地面遥控注入到航天器注入区,进行航天器软件的动态在轨维护。
[0015] 本发明与现有技术相比的优点在于:
[0016] (1)本发明方法通过在轨动态维护指令码的生成,实现了航天器上软件动态替换 和还原,适应了 PROM固化航天器软件的应用场景,避免了静态在轨维护中系统重新加电的 问题;同时由于本发明方法属于航天器在轨DSP软件补下型的模块升级,在现有航天器预留 的在轨注入空间和星地之间数据上行注入带宽情况下,可W灵活应用;
[0017] (2)本发明方法通过在轨动态维护指令码的生成,能够灵活指定返回的目标地址, 既可W最大限度的利用原在轨航天器软件,又同时减小了在轨维护指令码规模,适应了受 限于存储器等硬件资源和上行注入带宽约束的航天在轨DSP软件的设计;
[0018] (3)本发明方法在TMS320C6000系列DSP平台航天器软件在轨维护领域具有广泛的 适用性。一方面该方法不局限于PROM固化航天器软件的应用场景,它同样适用于化ASH/ 邸PR0M/MRAM等可擦写存储器类型的航天器软件应用场景;另一方面,该方法通过修改返回 目标地址,同样可W实现大规模软件整体更替的情况。
【附图说明】
[0019] 图1为本发明方法的流程框图。
【具体实施方式】
[0020] 本发明的基本思想是依据在轨维护需求,选取距离在轨软件维护功能最近的具有 钩子功能的函数作为在轨维护原函数。因为为了增强可维护性和可靠性,航天器软件在设 计时会选择一些函数预留好钩子功能,W解决固化在PROM中的软件的在轨维护问题。然而 并非每个函数都要预留钩子功能,因为钩子设置越多,系统开销就越大。通常会选取顶层函 数、中断处理函数及关键节点函数等类型的函数来预留钩子。按照在轨维护要求,编写好在 轨维护源代码,利用DSP软件编译伪指令#9^肖111曰将编写的在轨维护源代码指定到注入区地 址,与原航天器上固化的软件源代码进行联合编译,编译完成后提取出在轨维护源代码所 生成的指令码片段,并修改该指令码片段的最终返回指令,使其能够返回到原航天器上软 件的指定目标地址(即航天器上软件被替换的功能执行完最终要跳转的地址)继续运行,形 成最终的在轨维护二进制指令码。通过地面遥控实现航天器上软件的动态替换,并在执行 完在轨维护指令码后正确返回到原航天器上软件继续运行的功能,运样就可W最大程度利 用原有的航天器上软件,减小在轨维护注入码上行的带宽需求。
[0021] 如图1所示,为本发明方法的流程框图,主要步骤如下:
[0022] 1、依据在轨维护任务需求,选取距离航天器上软件所需维护功能最近的具有钩子 的函数作为在轨维护原函数。航天器软件设计时,钩子设置越多,表明其软件功能的可维护 性越好,但是相应的因钩子而带来系统额外开销越大。因此实际工程中,并非每个函数都预 留钩子,钩子的设置一般在可维护性和系统开销之间采取折中方案,一般原则是选取顶层 函数、中断处理函数及关键节点函数等类型的函数来预留钩子。当需要在轨维护时,如果航 天器上软件所需维护功能函数本身存在钩子,则直接W该函数中的钩子为基础进行在轨维 护,否则需在该功能函数的上层函数进行递进式查找,直到找到距离最接近的存在钩子的 函数,即作为在轨维护原函数。
[0023] 表1给出了在轨功能函数中钩子的两种实现示例。
[0024] 表1在轨DSP软件功能函数中钩子的实现示例
[0025]
[0026] 注:TR32_0bt 化 nc_ENA 化E、TR32JTO0KADDR、TR32J100KFLG 的功能均为从内存固定 地址S区中读数并进行S取二,W增强可靠性;void(*prog)(void);为函数指针prog的全 局定义;ADDR_SRAM_0bt为在轨维护指令码注入区起始地址。
[0027] 表1中描述了航天器上在轨软件钩子实现的两种方式,运两种方式的基本原理是 一致的,均采用逻辑分支的执行方式,即在轨函数根据在轨维护使能标志来判断执行原在 轨功能实现分支或者注入的在轨维护功能实现分支。方式(b)是将方式(a)中在轨维护函数 指针prog的调用W新函数ObsmHook的形式进行了封装。方式(a)的优点是能够灵活的实现 在轨函数模块的整体替换和局部替换,但是在轨维护注入指令码的返回地址不固定,随在 轨维护原函数的不同而不同,也随整体、局部替换方式的不同而不同;方式(b)的优点是所 有在轨维护原函数的在轨维护注入指令码的返回地址固定,均为在轨维护钩子函数 ObsmHook的堆找释放起始地址,但是该方式缺乏灵活性,只能实现在轨函数模块的整体替 换,不能实现在轨函数模块局部替换。在实际航天器软件设计时,一般采取方式(a),突出软 件在轨维护的灵活性。
[00%] 2、按照注入区地址,修改原航天器上DSP软件的链接命令文件(CMD文件),设定新 的段(section)空间,示例如表2所示。
[0029] 表2新增注入区段空间的CMD文件示例
[0030]
[0031] 表2中描述的是在原航天器上DSP软件的链接命令文件(CMD文件)基础上新增注入 区段空间后的文件示例。其中MEMORY和SECTIONS是CMD文件中必要的两个伪指令,MEMORY用 来指定目标存储器配置,SECTIONS用来控制程序中段如何建立和分配。表2示例中"……"代 表省略了原航天器上DSP软件的链接命令文件内容,MEMORY结构中"In ject_RAM: O = 013E000化,l=00002800h"表示目标存储器中的新增配置项:起始地址为0xl3E0000(注: 0X13E0000为设定的在轨维护注入区起始地址示例),长度为0x2800字节的存储空间(注: 0x2800字节长度根据工程实际自行设定,但是需大于在轨维护注入指令码的所占空间); SECTIONS结构中tempsec〉Inject_RAM"表不段名为.tempsec的段将分配到In ject_RAM指 定的存储空间。
[0032] 依据在轨维护任务需求和选取的在轨维护原函数,编写在轨注入源代码(C语言), 并在该源代码文件中通过DSP预编译伪指令"祁ragma C0DE_WCTI0N"或"祁ragma DATA_ SECTION"将编写的在轨注入函数或数据指定到链接命令文件(CMD文件)新增的在轨维护注 入区起始地址所在的段内,如表2示例中段.tempsec。表3所示为在轨注入函数体0btFunc_ Inject通过伪指令。#pragma C0DE_SECTI0N(ObtF^mcJnjecttempsec")"将被编译器分 配到段.tempsec的存储空间。
[0033] 表3预编译伪指令指定段空间示例
[0034]
[0(X3日]3、在DSP软件的编译环境CCS(Code Composer S化dio)下,对原有航天器上软件代 码和在轨维护代码进行联合编译,生成.out目标文件,由.out目标文件进而生成.1 St链接 文件(可^使用撕5自带的工具(1136^6义6,一般在0:5安装目录下/〔6000八旨1:〇〇13/13;[]1目录 下)。在.1st链接文件中找到并提取在轨注入源代码生成的指令码片段。
[0036] 4、在提取的在轨注入源代码生成的指令片段中,找到函数返回的对应汇编码指令 TB B3")。在TMS320C6000系列DSP软件中,汇编码B指令是跳转指令,寄存器B3是函数的返 回地址寄存器,(巧B3")指令就是跳转到B3寄存器值对应的地址执行。
[0037] 5、如果采取函数模块整体替换方式,则直接转步骤6,否则如果采取的是函数模块 局部替换方式,即在轨注入的函数指令返回到航天器上在轨维护原函数的中间地址,则需 要梳理.1st链接文件中航天器上在轨维护原函数编译生成的汇编码指令。
[0038] 在航天器上在轨维护原函数编译生成的汇编码指令中,在被替换掉的汇编码指令 中找出满足如下条件的寄存器和堆找地址:被赋值且后面保留的汇编码指令中使用该寄存 器和堆找地址,并且使用前未被赋予新值。满足上述条件的寄存器和堆找地址中的值在在 轨维护注入函数指令返回前需要还原,使其和在轨注入前保持一致。
[0039] 如表4中示例所示,.1st链接文件中的指令格式显示为对应的=列:二进制指令码 对应的绝对地址、二进制指令码及该二进制指令码对应的汇编指令码。示例中W航天器上 在轨维护原函数ObtFunc为例说明在轨函数模块局部替换方式。根据在轨维护时原函数中 指令码所起作用的不同,在轨维护原函数Obt化nc的指令码可W分为如下6个指令码块:
[0040] a)在轨维护原函数开辟堆找指令块:开辟在轨维护原函数Obt化nc的堆找空间,并 保存相关寄存器值的相关指令;
[0041] b)钩子(跳转指令)指令块:判断在轨维护原函数ObtFunc的在轨维护使能标志,当 使能时,使执行指令跳转到相应的在轨维护注入区起始地址开始执行,否则继续执行在轨 维护原函数Obt化nc的后续指令;
[0042] C)在轨维护原函数被替换部分指令块:在轨维护使能标志使能时,在轨维护原函 数Obt化nc指令码中被替换掉部分的指令;
[0043] d)在轨维护原函数保留部分指令块:在轨维护使能标志使能时,在轨维护原函数 Obt化nc指令码中位于被替换部分指令块与函数释放堆找指令块之间的指令码;
[0044] e)在轨维护原函数释放堆找指令块:释放在轨维护原函数Obt化nc的堆找空间,并 还原相关寄存器值的相关指令;
[0045] f)在轨维护原函数返回语句指令块:实现返回上层函数的指令码。
[0046] 示例中W局部替换方式实现函数ObtFunc的在轨维护,即W在轨注入函数 ObtFuncJnject的指令码替换掉函数ObtFunc中的"在轨维护原函数被替换部分指令块", ObtFuncJnject指令执行结束后需返回函数ObtFunc中的"在轨维护原函数保留部分指令 块"起始地址(示例中为0x000119a0的地址)继续执行。由于采取局部替换的方式,梳理在轨 维护原函数ObtFunc的指令码,其巧轨维护原函数被替换部分指令块"中,寄存器A4、A5被 赋值,而在函数ObtFunc中的"在轨维护原函数保留部分指令块"中,需要使用寄存器A4、A5 中的值,且使用前寄存器A4、A5未被赋予新值。因此在轨注入函数ObtFuncJnject的指令 码,其函数返回指令码("B.S2B3")前需要还原寄存器A4、A5中的值。参照函数ObtFunc"在轨 维护原函数被替换部分指令块"中寄存器A4、A5的赋值指令码,在ObtFuncJnject函数返回 指令码("B.S2B3")前增加汇编码指令("MVK.S1 0xffff849b,A5;MVK.Sl 0x2b9b,A4; MVKH.Sl 0x3d060000,A5;MVKH.Sl 0x86a100 00,A4")〇
[0047] 表4DSP软件在轨维护.1st文件说明示例
[004引
[0049] 6、在在轨维护函数返回指令码("B B3")的前面,根据返回的航天器上在轨原函数 中指令码的目标地址,修改寄存器B3的值。如表4示例所示,采用局部替换方式,返回的在轨 维护原函数中指令码的目标地址为Ox 119a0,则需要在注入函数ObtFuncJn j ect的返回指 令码TB. S2B3")前增加汇编码TMVK Oxll9aO,B3;MVKH Oxll9aO,B3")。如果采取函数整体 替换的方式,寄存器B3的值则应该修改为在轨维护原函数Obt化nc"在轨维护原函数释放堆 找指令块"的起始地址,即Oxl 1 c98。
[0050] 为实现在轨注入指令码正确返回而增加汇编码指令时,要保证所增加汇编码指令 前面的原有汇编码指令能够正常执行完成,必要时可W增加延时汇编指令码("N0P")。
[0051 ] 7.将修改完毕的在轨注入函数汇编码指令进行编译后,生成最终注入的在轨维护 二进制指令码,通过地面遥控注入到航天器上在轨维护注入区,使能相应的在轨维护标志 后,完成航天器软件的动态在轨维护。
[0052]本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
【主权项】
1. 一种针对DSP平台航天器软件的动态在轨维护方法,其特征在于包括如下步骤: (1) 依据在轨维护任务需求,选取距离航天器上DSP软件所需维护的功能最近的具有钩 子的函数作为在轨维护原函数; (2) 按照航天器注入区地址,修改原航天器上DSP软件的链接命令文件,设定新的段空 间; (3) 在原航天器上DSP软件的编译环境下,根据在轨维护需求编写相应的在轨维护源代 码,并通过预编译伪指令将相应的在轨维护源代码指定到链接命令文件新增的段空间; (4) 在原航天器上DSP软件的编译环境下,将原航天器上软件源代码与在轨维护源代码 进行联合编译,生成.out目标文件,然后由.out目标文件进而生成.1st链接文件,在.1st链 接文件中提取出在轨维护源代码生成的指令码片段; (5) 在所述指令码片段中,找到函数返回的对应汇编码指令("B B3"),并判断所述的指 令码片段是对在轨维护原函数的整体替换还是部分替换,如果是采取在轨维护原函数的整 体替换方式,直接转步骤(7);如果是采取在轨维护原函数的局部替换方式,则转步骤(6); (6) 梳理.1st链接文件中在轨维护原函数编译生成的汇编码指令,在被替换的汇编码 指令中找出满足如下条件的寄存器和堆栈地址:被赋值且后面保留的汇编码中使用该寄存 器和堆栈地址,并且使用前未被赋予新值;将满足上述条件的寄存器和堆栈地址中的值进 行变更,使其和原航天器上DSP软件一致; (7) 在所述汇编码指令("B B3")中,将函数返回地址寄存器B3的值修改为在轨维护原 函数中的返回目标地址; (8) 将修改完毕的在轨维护汇编码指令进行编译后,生成最终注入的在轨维护二进制 指令码,通过地面遥控注入到航天器注入区,进行航天器软件的动态在轨维护。2. 根据权利要求1所述的一种针对DSP平台航天器软件的动态在轨维护方法,其特征在 于:所述的DSP为TMS320C6000系列DSP。
【文档编号】G06F9/44GK106020812SQ201610320418
【公开日】2016年10月12日
【申请日】2016年5月16日
【发明人】李振松, 杜建伟, 鹿瑞, 关健, 侯莹, 王晓磊
【申请人】北京控制工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1