一種針對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日
【發明人】李振松, 杜建偉, 鹿瑞, 關健, 侯瑩, 王曉磊
【申請人】北京控制工程研究所