一種針對dsp平臺航天器軟件的動態(tài)在軌維護方法
【專利摘要】一種針對DSP平臺航天器軟件的動態(tài)在軌維護方法,主要是依據(jù)航天器上軟件設計時預先設定的鉤子函數(shù),編寫相應的在軌維護源代碼,通過編譯鏈接文件(CMD文件)指定在軌維護注入?yún)^(qū),修改編譯生成的二進制碼的返回地址,使在軌維護注入碼執(zhí)行完畢后能夠正確返回原在軌軟件繼續(xù)執(zhí)行。本發(fā)明方法可以避免靜態(tài)在軌維護方案中系統(tǒng)需要重新加電的問題以及動態(tài)在軌維護方案中受限于存儲空間和帶寬無法進行大規(guī)模軟件整體更替的問題,實現(xiàn)了航天器在軌DSP軟件補丁型的模塊級在軌維護功能。
【專利說明】
-種針對DSP平臺航天器軟件的動態(tài)在軌維護方法
技術領域
[0001] 本發(fā)明屬于航天器在軌維護領域,設及一種針對美國德州儀器(TI)公司 TMS320C6000系列DSP平臺航天器軟件的動態(tài)在軌維護方法。
【背景技術】
[0002] 航天器軟件的在軌維護能力是保證航天器長壽命不可或缺的手段,與硬件的冗余 備份相比,運種方法更經(jīng)濟、靈活。通過軟件在軌維護來提高航天器的壽命和可靠性的方式 越來越受到重視。
[0003] DSP(數(shù)字信號處理器)在航天領域的應用越來越廣泛,DSP軟件的可維護性直接影 響了系統(tǒng)的穩(wěn)定性。目前,在航天領域針對DSP處理器軟件的在軌維護方法,文獻《制導與引 信》2011年第32卷第4期發(fā)表的"一種星載DSP軟件的在軌編程方法"中,提到通過修改引導 啟動軟件代碼的方式實現(xiàn)在軌軟件的升級。該方法設計思想可行,但前提條件是星載軟件 本身存儲在FLASH等可寫存儲器內(nèi),并且在軌維護軟件的啟動需要系統(tǒng)重新上電加載,屬于 靜態(tài)的在軌維護方案。由于系統(tǒng)重新加電不利于系統(tǒng)控制的連續(xù)性,因此靜態(tài)的軟件在軌 維護方案在實際的航天器控制系統(tǒng)軟件設計中并不適用。而且當前航天器軟件主要是固化 在PROM存儲器中,在軌時無法改寫,因此DSP軟件的在軌維護方案需要采取動態(tài)在軌維護。
[0004] 針對DSP軟件動態(tài)在軌維護,僅在文獻《單片機與嵌入式系統(tǒng)應用》2011年第11卷 第4期發(fā)表的"DSP空間相機控制器的在軌程序注入"中有所設及,但是該文獻描述的DSP軟 件在軌重注方法面向的是TMS320VC33系列DSP處理器,且該方法實現(xiàn)的在軌維護屬于在軌 程序替代型,即在軌維護程序啟動后,將完全替換掉原在軌軟件。由于一般航天器軟件的規(guī) 模比較大,在實際的在軌維護時,該替代型維護方法往往受限于航天器預留的在軌注入空 間和星地之間數(shù)據(jù)上行注入帶寬,具有一定的局限性。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明解決的技術問題是:克服現(xiàn)有技術的不足,提供了一種針對DSP平臺航天器 軟件的動態(tài)在軌維護方法,避免靜態(tài)在軌維護方案中系統(tǒng)需要重新加電的問題W及動態(tài)在 軌維護方案中受限于存儲空間和帶寬無法進行大規(guī)模軟件整體更替的問題,實現(xiàn)了航天器 在軌DSP軟件補下型的模塊級在軌維護功能。
[0006] 本發(fā)明的技術解決方案是:一種針對DSP平臺航天器軟件的動態(tài)在軌維護方法,包 括如下步驟:
[0007] (1)依據(jù)在軌維護任務需求,選取距離航天器上DSP軟件所需維護的功能最近的具 有鉤子的函數(shù)作為在軌維護原函數(shù);所述的DSP為TMS320C6000系列DSP;
[000引(2)按照航天器注入?yún)^(qū)地址,修改原航天器上DSP軟件的鏈接命令文件,設定新的 段空間;
[0009] (3)在原航天器上DSP軟件的編譯環(huán)境下,根據(jù)在軌維護需求編寫相應的在軌維護 源代碼,并通過預編譯偽指令將相應的在軌維護源代碼指定到鏈接命令文件新增的段空 間;
[0010] (4)在原航天器上DSP軟件的編譯環(huán)境下,將原航天器上軟件源代碼與在軌維護源 代碼進行聯(lián)合編譯,生成.out目標文件,然后由.out目標文件進而生成.1 St鏈接文件,在 .1st鏈接文件中提取出在軌維護源代碼生成的指令碼片段;
[0011] (5)在所述指令碼片段中,找到函數(shù)返回的對應匯編碼指令("B B3"),并判斷所述 的指令碼片段是對在軌維護原函數(shù)的整體替換還是部分替換,如果是采取在軌維護原函數(shù) 的整體替換方式,直接轉(zhuǎn)步驟(7);如果是采取在軌維護原函數(shù)的局部替換方式,則轉(zhuǎn)步驟 (6);
[0012] (6)梳理.1st鏈接文件中在軌維護原函數(shù)編譯生成的匯編碼指令,在被替換的匯 編碼指令中找出滿足如下條件的寄存器和堆找地址:被賦值且后面保留的匯編碼中使用該 寄存器和堆找地址,并且使用前未被賦予新值;將滿足上述條件的寄存器和堆找地址中的 值進行變更,使其和原航天器上DSP軟件一致;
[0013] (7)在所述匯編碼指令("B B3")中,將函數(shù)返回地址寄存器B3的值修改為在軌維 護原函數(shù)中的返回目標地址;
[0014] (8)將修改完畢的在軌維護匯編碼指令進行編譯后,生成最終注入的在軌維護二 進制指令碼,通過地面遙控注入到航天器注入?yún)^(qū),進行航天器軟件的動態(tài)在軌維護。
[0015] 本發(fā)明與現(xiàn)有技術相比的優(yōu)點在于:
[0016] (1)本發(fā)明方法通過在軌動態(tài)維護指令碼的生成,實現(xiàn)了航天器上軟件動態(tài)替換 和還原,適應了 PROM固化航天器軟件的應用場景,避免了靜態(tài)在軌維護中系統(tǒng)重新加電的 問題;同時由于本發(fā)明方法屬于航天器在軌DSP軟件補下型的模塊升級,在現(xiàn)有航天器預留 的在軌注入空間和星地之間數(shù)據(jù)上行注入帶寬情況下,可W靈活應用;
[0017] (2)本發(fā)明方法通過在軌動態(tài)維護指令碼的生成,能夠靈活指定返回的目標地址, 既可W最大限度的利用原在軌航天器軟件,又同時減小了在軌維護指令碼規(guī)模,適應了受 限于存儲器等硬件資源和上行注入帶寬約束的航天在軌DSP軟件的設計;
[0018] (3)本發(fā)明方法在TMS320C6000系列DSP平臺航天器軟件在軌維護領域具有廣泛的 適用性。一方面該方法不局限于PROM固化航天器軟件的應用場景,它同樣適用于化ASH/ 邸PR0M/MRAM等可擦寫存儲器類型的航天器軟件應用場景;另一方面,該方法通過修改返回 目標地址,同樣可W實現(xiàn)大規(guī)模軟件整體更替的情況。
【附圖說明】
[0019] 圖1為本發(fā)明方法的流程框圖。
【具體實施方式】
[0020] 本發(fā)明的基本思想是依據(jù)在軌維護需求,選取距離在軌軟件維護功能最近的具有 鉤子功能的函數(shù)作為在軌維護原函數(shù)。因為為了增強可維護性和可靠性,航天器軟件在設 計時會選擇一些函數(shù)預留好鉤子功能,W解決固化在PROM中的軟件的在軌維護問題。然而 并非每個函數(shù)都要預留鉤子功能,因為鉤子設置越多,系統(tǒng)開銷就越大。通常會選取頂層函 數(shù)、中斷處理函數(shù)及關鍵節(jié)點函數(shù)等類型的函數(shù)來預留鉤子。按照在軌維護要求,編寫好在 軌維護源代碼,利用DSP軟件編譯偽指令#9^肖111曰將編寫的在軌維護源代碼指定到注入?yún)^(qū)地 址,與原航天器上固化的軟件源代碼進行聯(lián)合編譯,編譯完成后提取出在軌維護源代碼所 生成的指令碼片段,并修改該指令碼片段的最終返回指令,使其能夠返回到原航天器上軟 件的指定目標地址(即航天器上軟件被替換的功能執(zhí)行完最終要跳轉(zhuǎn)的地址)繼續(xù)運行,形 成最終的在軌維護二進制指令碼。通過地面遙控實現(xiàn)航天器上軟件的動態(tài)替換,并在執(zhí)行 完在軌維護指令碼后正確返回到原航天器上軟件繼續(xù)運行的功能,運樣就可W最大程度利 用原有的航天器上軟件,減小在軌維護注入碼上行的帶寬需求。
[0021] 如圖1所示,為本發(fā)明方法的流程框圖,主要步驟如下:
[0022] 1、依據(jù)在軌維護任務需求,選取距離航天器上軟件所需維護功能最近的具有鉤子 的函數(shù)作為在軌維護原函數(shù)。航天器軟件設計時,鉤子設置越多,表明其軟件功能的可維護 性越好,但是相應的因鉤子而帶來系統(tǒng)額外開銷越大。因此實際工程中,并非每個函數(shù)都預 留鉤子,鉤子的設置一般在可維護性和系統(tǒng)開銷之間采取折中方案,一般原則是選取頂層 函數(shù)、中斷處理函數(shù)及關鍵節(jié)點函數(shù)等類型的函數(shù)來預留鉤子。當需要在軌維護時,如果航 天器上軟件所需維護功能函數(shù)本身存在鉤子,則直接W該函數(shù)中的鉤子為基礎進行在軌維 護,否則需在該功能函數(shù)的上層函數(shù)進行遞進式查找,直到找到距離最接近的存在鉤子的 函數(shù),即作為在軌維護原函數(shù)。
[0023] 表1給出了在軌功能函數(shù)中鉤子的兩種實現(xiàn)示例。
[0024] 表1在軌DSP軟件功能函數(shù)中鉤子的實現(xiàn)示例
[0025]
[0026] 注:TR32_0bt 化 nc_ENA 化E、TR32JTO0KADDR、TR32J100KFLG 的功能均為從內(nèi)存固定 地址S區(qū)中讀數(shù)并進行S取二,W增強可靠性;void(*prog)(void);為函數(shù)指針prog的全 局定義;ADDR_SRAM_0bt為在軌維護指令碼注入?yún)^(qū)起始地址。
[0027] 表1中描述了航天器上在軌軟件鉤子實現(xiàn)的兩種方式,運兩種方式的基本原理是 一致的,均采用邏輯分支的執(zhí)行方式,即在軌函數(shù)根據(jù)在軌維護使能標志來判斷執(zhí)行原在 軌功能實現(xiàn)分支或者注入的在軌維護功能實現(xiàn)分支。方式(b)是將方式(a)中在軌維護函數(shù) 指針prog的調(diào)用W新函數(shù)ObsmHook的形式進行了封裝。方式(a)的優(yōu)點是能夠靈活的實現(xiàn) 在軌函數(shù)模塊的整體替換和局部替換,但是在軌維護注入指令碼的返回地址不固定,隨在 軌維護原函數(shù)的不同而不同,也隨整體、局部替換方式的不同而不同;方式(b)的優(yōu)點是所 有在軌維護原函數(shù)的在軌維護注入指令碼的返回地址固定,均為在軌維護鉤子函數(shù) ObsmHook的堆找釋放起始地址,但是該方式缺乏靈活性,只能實現(xiàn)在軌函數(shù)模塊的整體替 換,不能實現(xiàn)在軌函數(shù)模塊局部替換。在實際航天器軟件設計時,一般采取方式(a),突出軟 件在軌維護的靈活性。
[00%] 2、按照注入?yún)^(qū)地址,修改原航天器上DSP軟件的鏈接命令文件(CMD文件),設定新 的段(section)空間,示例如表2所示。
[0029] 表2新增注入?yún)^(qū)段空間的CMD文件示例
[0030]
[0031] 表2中描述的是在原航天器上DSP軟件的鏈接命令文件(CMD文件)基礎上新增注入 區(qū)段空間后的文件示例。其中MEMORY和SECTIONS是CMD文件中必要的兩個偽指令,MEMORY用 來指定目標存儲器配置,SECTIONS用來控制程序中段如何建立和分配。表2示例中"……"代 表省略了原航天器上DSP軟件的鏈接命令文件內(nèi)容,MEMORY結(jié)構中"In ject_RAM: O = 013E000化,l=00002800h"表示目標存儲器中的新增配置項:起始地址為0xl3E0000(注: 0X13E0000為設定的在軌維護注入?yún)^(qū)起始地址示例),長度為0x2800字節(jié)的存儲空間(注: 0x2800字節(jié)長度根據(jù)工程實際自行設定,但是需大于在軌維護注入指令碼的所占空間); SECTIONS結(jié)構中tempsec〉Inject_RAM"表不段名為.tempsec的段將分配到In ject_RAM指 定的存儲空間。
[0032] 依據(jù)在軌維護任務需求和選取的在軌維護原函數(shù),編寫在軌注入源代碼(C語言), 并在該源代碼文件中通過DSP預編譯偽指令"祁ragma C0DE_WCTI0N"或"祁ragma DATA_ SECTION"將編寫的在軌注入函數(shù)或數(shù)據(jù)指定到鏈接命令文件(CMD文件)新增的在軌維護注 入?yún)^(qū)起始地址所在的段內(nèi),如表2示例中段.tempsec。表3所示為在軌注入函數(shù)體0btFunc_ Inject通過偽指令。#pragma C0DE_SECTI0N(ObtF^mcJnjecttempsec")"將被編譯器分 配到段.tempsec的存儲空間。
[0033] 表3預編譯偽指令指定段空間示例
[0034]
[0(X3日]3、在DSP軟件的編譯環(huán)境CCS(Code Composer S化dio)下,對原有航天器上軟件代 碼和在軌維護代碼進行聯(lián)合編譯,生成.out目標文件,由.out目標文件進而生成.1 St鏈接 文件(可^使用撕5自帶的工具(1136^6義6,一般在0:5安裝目錄下/〔6000八旨1:〇〇13/13;[]1目錄 下)。在.1st鏈接文件中找到并提取在軌注入源代碼生成的指令碼片段。
[0036] 4、在提取的在軌注入源代碼生成的指令片段中,找到函數(shù)返回的對應匯編碼指令 TB B3")。在TMS320C6000系列DSP軟件中,匯編碼B指令是跳轉(zhuǎn)指令,寄存器B3是函數(shù)的返 回地址寄存器,(巧B3")指令就是跳轉(zhuǎn)到B3寄存器值對應的地址執(zhí)行。
[0037] 5、如果采取函數(shù)模塊整體替換方式,則直接轉(zhuǎn)步驟6,否則如果采取的是函數(shù)模塊 局部替換方式,即在軌注入的函數(shù)指令返回到航天器上在軌維護原函數(shù)的中間地址,則需 要梳理.1st鏈接文件中航天器上在軌維護原函數(shù)編譯生成的匯編碼指令。
[0038] 在航天器上在軌維護原函數(shù)編譯生成的匯編碼指令中,在被替換掉的匯編碼指令 中找出滿足如下條件的寄存器和堆找地址:被賦值且后面保留的匯編碼指令中使用該寄存 器和堆找地址,并且使用前未被賦予新值。滿足上述條件的寄存器和堆找地址中的值在在 軌維護注入函數(shù)指令返回前需要還原,使其和在軌注入前保持一致。
[0039] 如表4中示例所示,.1st鏈接文件中的指令格式顯示為對應的=列:二進制指令碼 對應的絕對地址、二進制指令碼及該二進制指令碼對應的匯編指令碼。示例中W航天器上 在軌維護原函數(shù)ObtFunc為例說明在軌函數(shù)模塊局部替換方式。根據(jù)在軌維護時原函數(shù)中 指令碼所起作用的不同,在軌維護原函數(shù)Obt化nc的指令碼可W分為如下6個指令碼塊:
[0040] a)在軌維護原函數(shù)開辟堆找指令塊:開辟在軌維護原函數(shù)Obt化nc的堆找空間,并 保存相關寄存器值的相關指令;
[0041] b)鉤子(跳轉(zhuǎn)指令)指令塊:判斷在軌維護原函數(shù)ObtFunc的在軌維護使能標志,當 使能時,使執(zhí)行指令跳轉(zhuǎn)到相應的在軌維護注入?yún)^(qū)起始地址開始執(zhí)行,否則繼續(xù)執(zhí)行在軌 維護原函數(shù)Obt化nc的后續(xù)指令;
[0042] C)在軌維護原函數(shù)被替換部分指令塊:在軌維護使能標志使能時,在軌維護原函 數(shù)Obt化nc指令碼中被替換掉部分的指令;
[0043] d)在軌維護原函數(shù)保留部分指令塊:在軌維護使能標志使能時,在軌維護原函數(shù) Obt化nc指令碼中位于被替換部分指令塊與函數(shù)釋放堆找指令塊之間的指令碼;
[0044] e)在軌維護原函數(shù)釋放堆找指令塊:釋放在軌維護原函數(shù)Obt化nc的堆找空間,并 還原相關寄存器值的相關指令;
[0045] f)在軌維護原函數(shù)返回語句指令塊:實現(xiàn)返回上層函數(shù)的指令碼。
[0046] 示例中W局部替換方式實現(xiàn)函數(shù)ObtFunc的在軌維護,即W在軌注入函數(shù) ObtFuncJnject的指令碼替換掉函數(shù)ObtFunc中的"在軌維護原函數(shù)被替換部分指令塊", ObtFuncJnject指令執(zhí)行結(jié)束后需返回函數(shù)ObtFunc中的"在軌維護原函數(shù)保留部分指令 塊"起始地址(示例中為0x000119a0的地址)繼續(xù)執(zhí)行。由于采取局部替換的方式,梳理在軌 維護原函數(shù)ObtFunc的指令碼,其巧軌維護原函數(shù)被替換部分指令塊"中,寄存器A4、A5被 賦值,而在函數(shù)ObtFunc中的"在軌維護原函數(shù)保留部分指令塊"中,需要使用寄存器A4、A5 中的值,且使用前寄存器A4、A5未被賦予新值。因此在軌注入函數(shù)ObtFuncJnject的指令 碼,其函數(shù)返回指令碼("B.S2B3")前需要還原寄存器A4、A5中的值。參照函數(shù)ObtFunc"在軌 維護原函數(shù)被替換部分指令塊"中寄存器A4、A5的賦值指令碼,在ObtFuncJnject函數(shù)返回 指令碼("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、在在軌維護函數(shù)返回指令碼("B B3")的前面,根據(jù)返回的航天器上在軌原函數(shù) 中指令碼的目標地址,修改寄存器B3的值。如表4示例所示,采用局部替換方式,返回的在軌 維護原函數(shù)中指令碼的目標地址為Ox 119a0,則需要在注入函數(shù)ObtFuncJn j ect的返回指 令碼TB. S2B3")前增加匯編碼TMVK Oxll9aO,B3;MVKH Oxll9aO,B3")。如果采取函數(shù)整體 替換的方式,寄存器B3的值則應該修改為在軌維護原函數(shù)Obt化nc"在軌維護原函數(shù)釋放堆 找指令塊"的起始地址,即Oxl 1 c98。
[0050] 為實現(xiàn)在軌注入指令碼正確返回而增加匯編碼指令時,要保證所增加匯編碼指令 前面的原有匯編碼指令能夠正常執(zhí)行完成,必要時可W增加延時匯編指令碼("N0P")。
[0051 ] 7.將修改完畢的在軌注入函數(shù)匯編碼指令進行編譯后,生成最終注入的在軌維護 二進制指令碼,通過地面遙控注入到航天器上在軌維護注入?yún)^(qū),使能相應的在軌維護標志 后,完成航天器軟件的動態(tài)在軌維護。
[0052]本發(fā)明說明書中未作詳細描述的內(nèi)容屬本領域技術人員的公知技術。
【主權項】
1. 一種針對DSP平臺航天器軟件的動態(tài)在軌維護方法,其特征在于包括如下步驟: (1) 依據(jù)在軌維護任務需求,選取距離航天器上DSP軟件所需維護的功能最近的具有鉤 子的函數(shù)作為在軌維護原函數(shù); (2) 按照航天器注入?yún)^(qū)地址,修改原航天器上DSP軟件的鏈接命令文件,設定新的段空 間; (3) 在原航天器上DSP軟件的編譯環(huán)境下,根據(jù)在軌維護需求編寫相應的在軌維護源代 碼,并通過預編譯偽指令將相應的在軌維護源代碼指定到鏈接命令文件新增的段空間; (4) 在原航天器上DSP軟件的編譯環(huán)境下,將原航天器上軟件源代碼與在軌維護源代碼 進行聯(lián)合編譯,生成.out目標文件,然后由.out目標文件進而生成.1st鏈接文件,在.1st鏈 接文件中提取出在軌維護源代碼生成的指令碼片段; (5) 在所述指令碼片段中,找到函數(shù)返回的對應匯編碼指令("B B3"),并判斷所述的指 令碼片段是對在軌維護原函數(shù)的整體替換還是部分替換,如果是采取在軌維護原函數(shù)的整 體替換方式,直接轉(zhuǎn)步驟(7);如果是采取在軌維護原函數(shù)的局部替換方式,則轉(zhuǎn)步驟(6); (6) 梳理.1st鏈接文件中在軌維護原函數(shù)編譯生成的匯編碼指令,在被替換的匯編碼 指令中找出滿足如下條件的寄存器和堆棧地址:被賦值且后面保留的匯編碼中使用該寄存 器和堆棧地址,并且使用前未被賦予新值;將滿足上述條件的寄存器和堆棧地址中的值進 行變更,使其和原航天器上DSP軟件一致; (7) 在所述匯編碼指令("B B3")中,將函數(shù)返回地址寄存器B3的值修改為在軌維護原 函數(shù)中的返回目標地址; (8) 將修改完畢的在軌維護匯編碼指令進行編譯后,生成最終注入的在軌維護二進制 指令碼,通過地面遙控注入到航天器注入?yún)^(qū),進行航天器軟件的動態(tài)在軌維護。2. 根據(jù)權利要求1所述的一種針對DSP平臺航天器軟件的動態(tài)在軌維護方法,其特征在 于:所述的DSP為TMS320C6000系列DSP。
【文檔編號】G06F9/44GK106020812SQ201610320418
【公開日】2016年10月12日
【申請日】2016年5月16日
【發(fā)明人】李振松, 杜建偉, 鹿瑞, 關健, 侯瑩, 王曉磊
【申請人】北京控制工程研究所