CN104820586B - 一种航天器嵌入式软件在轨维护方法 - Google Patents
一种航天器嵌入式软件在轨维护方法 Download PDFInfo
- Publication number
- CN104820586B CN104820586B CN201510164376.0A CN201510164376A CN104820586B CN 104820586 B CN104820586 B CN 104820586B CN 201510164376 A CN201510164376 A CN 201510164376A CN 104820586 B CN104820586 B CN 104820586B
- Authority
- CN
- China
- Prior art keywords
- machine code
- software
- code
- embedded software
- editions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
一种航天器嵌入式软件在轨维护方法,首先约定在轨维护航天器嵌入式软件设计规则,并依据该规则设计原版软件;然后在功能需求变化时设计新版软件,将原版嵌入式软件机器码划分为多个机器码未改变区、机器码变化识别区,并进行判断对比后得到新版软件的机器码未改变区、机器码变化识别区、机器码增加区,进而得到新版软件的微增量机器码与软件链表维护信息,进行校验和上注,完成多版本软件的在轨维护;最后根据直接指令切换航天器执行的某一版本的软件,满足功能需求变化。本发明方法与现有技术方法相比,在轨维护受原版软件限制小,上注量小,并且在维护过程中保证总有软件可在轨正常使用,提高了在轨维护的可靠性。
Description
技术领域
本发明属于航天器嵌入式软件应用领域,特别是一种航天器嵌入式软件在轨维护方法。
背景技术
为了避免强辐射、单粒子效应等太空工作环境产生的影响,在轨的航天器软件基本上是将运行的软件代码固化在不容易发生改变的程序存储器PROM中,在抗干扰能力及可靠性提高的同时,也失去了软件后期维护的功能。为了消除地面未能测试出的软件故障和实现由于硬件性能衰退、硬件故障等所带来的软件升级以及航天器产品在轨应用功能需求的改变,很多航天器软件都已经提出了软件在轨维护的功能需求。近几年,相关的研究和探索工作已经开展,但由于可靠性、上注效率以及工程可行性等多方面的原因,软件在轨维护还没有真正进入到广泛应用阶段。目前,用于航天器嵌入式软件在轨维护的方法主要有以下三种:
(1)将功能或参数修改后的新版软件整版上注,然后根据遥控指令切换运行新版软件或原版本软件实现软件在轨维护功能;(2)通过修改函数入口地址即软件调用关系的变化实现软件功能的更改,达到软件维护的目的;(3)通过比较功能更新后的新版二进制文件和在轨运行软件的二进制文件生成增量文件,将增量文件上注,然后通过在轨运行比较算法完成新版软件重组并执行,实现对嵌入式软件的在轨维护。
上述三种方法尽管都实现了软件在轨维护功能,但都有其局限性,第(1)种方法的软件上注代码量非常大,上注时间较长,对软件容错机制、软件存储空间和上注效率的要求都非常高。第(2)种方法则局限于对软件局部功能的修改,软件的可修改性完全取决于原来函数入口地址是否具备以及预留的空白空间、空函数等是否可供使用。第(3)种方法尽管提出了增量上注的概念,但由于软件功能更改的不确定性,其增量代码的获取方法并不能保证其增量代码很小,甚至与整版上注文件相比没有任何优势,上注量依然较大。如果为保证其上注量减小则软件的可更改性则大大降低,而且在轨运行比较算法进行软件重组和加载,对于软件执行效率、可靠性等方面的需求也非常高,因此现有嵌入式软件在轨维护技术都有代码上注量大或功能修改受限或执行效率降低等工程可行性不高的缺点。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种在轨维护受原版嵌入式软件限制小并能够在原版嵌入式软件的任意位置进行修改的航天器嵌入式软件在轨维护方法。
本发明的技术解决方案是:一种航天器嵌入式软件在轨维护方法,包括如下步骤:
(1)按照软件功能需求设计原版嵌入式软件,将原版嵌入式软件对应的机器码按照数据段、代码段、堆和栈的顺序依次排布,并在代码段后预留第一设定阈值长度的空间作为机器码增加区,然后将原版嵌入式软件固化落焊在航天器PROM中运行;
(2)在原版嵌入式软件运行过程中,根据在轨嵌入式软件功能需求变化设计t版嵌入式软件,并比较t版嵌入式软件源代码与原版嵌入式软件源代码,得到t版嵌入式软件需要改变的源代码位置和内容,进而得到原版嵌入式软件机器码需要改变的机器码地址及长度,然后将原版嵌入式软件机器码划分为多个机器码未改变区、机器码变化识别区,并对各个机器码变化识别区对应的t版嵌入式软件的源代码进行编译得到其机器码并依次判断;所述的机器码未改变区为原版嵌入式软件机器码未改变的区域;所述的机器码变化识别区为原版嵌入式软件机器码改变的区域,t的初值为1且为正整数;
(3)如果原版嵌入式软件机器码变化识别区对应的t版嵌入式软件机器码长度等于当前机器码变化识别区机器码长度,则将当前机器码变化识别区对应t版嵌入式软件机器码直接替换当前机器码变化识别区机器码;
如果变化识别区对应的t版嵌入式软件机器码长度大于当前机器码变化识别区机器码长度,则将当前机器码变化识别区对应的t版嵌入式软件机器码放入当前机器码变化识别区与机器码增加区,并在当前机器码变化识别区末位置添加跳转至机器码增加区中t版嵌入式软件机器码首位置的无条件长跳转指令,在机器码增加区中t版嵌入式软件机器码末位置添加跳转至与当前机器码变化识别区末位置相邻机器码的无条件长跳转指令;
如果变化识别区对应的t版嵌入式软件机器码长度小于当前机器码变化识别区机器码长度,则将变化识别区对应的t版嵌入式软件机器码放入当前变化识别区,并使用空操作指令填补使当前机器码长度等于变化识别区机器码长度;得到t版嵌入式软件源代码机器码;
(4)对比原版嵌入式软件机器码、t版嵌入式软件机器码得到变化的机器码地址和长度后与步骤(2)中寻找到的需要改变的机器码地址及长度对比并判断,如果两者相同,则转入步骤(5),否则重复步骤(2)-步骤(3);
(5)根据变化的机器码地址和长度得到t版嵌入式软件对应的微增量机器码,分别获取t版嵌入式软件中各个机器码变化识别区与机器码增加区中机器码在航天器EEPROM的存放地址长度、t版嵌入式软件中各个机器码未改变区中机器码在航天器PROM中的存放地址长度并形成其对应的链节信息,并将下一链节的存放地址放入上一链节信息中,得到t版嵌入式软件中各个机器码变化识别区、机器码增加区与机器码未改变区对应的链节信息后组合得到t版嵌入式软件对应的链条,进而得到t版嵌入式软件对应的软件链表维护信息,其中,各个机器码未改变区、机器码变化识别区、机器码增加区均对应一个链节信息;所述微增量机器码为t版嵌入式软件中各个机器码变化识别区、机器码增加区中变化的机器码,其中,各个机器码变化识别区、机器码增加区均对应一段微增量机器码;所述链条开始地址为当前版本嵌入式软件中第一个链节信息的存放地址;所述软件链表维护信息包括链条开始地址、链节数、软件校验和、微增量机器码及其在航天器EEPRM中的存放地址长度、当前嵌入式软件版本号、链节信息;
(6)发送上注控制字指令至航天器并控制航天器接收数据,然后对微增量机器码与软件链表维护信息以第二设定阈值长度进行分帧后得到多个数据包,依次将数据包上注至航天器EEPROM,计算每个上注完成的数据包的累加和并与其对应的校验和进行对比,如果两者相等,则该数据包上注完成,否则发送指令控制地面重复上注该数据包直至数据包的累加和与其对应的校验和相等,在所有数据包上注结束时重复发送上注控制字指令来控制航天器结束接收数据,其中,在对微增量机器码与软件链表维护信息以第二设定阈值长度进行分帧时,如果最后一帧数据长度小于设阈值,则通过填零使最后一帧数据长度为设定阈值长度,数据包包括该数据包的校验和;所述上注控制字指令包括微增量机器码与软件链表维护信息在航天器EEPROM的存放开始地址、数据长度及校验和;
(7)等待下次在轨嵌入式软件功能需求变化,并监测地面发送的直接指令,当在轨嵌入式软件功能需求变化时,使t=t+1,并重复步骤(2)-步骤(6)完成新的在轨维护,然后等待下次在轨嵌入式软件功能需求变化,并监测地面发送的直接指令,当地面发送直接指令时,转入步骤(8);
(8)根据直接指令使用搬移程序搬移原版嵌入式软件机器码或k版嵌入式软件机器码并搬至航天器SRAM中,然后计算航天器SRAM中k版嵌入式软件机器码累加和并与其校验和对比,如果两者不相等,则重复步骤(8)直至两者相等,如果两者相等,则执行k版嵌入式软件,并转入步骤(7),其中,k=1,2,3,,,t。
所述的步骤(1)第一设定阈值长度的取值范围为代码段长度的10%。
所述的步骤(1)中将t版嵌入式软件对应的机器码按照数据段、代码段、堆和栈的顺序依次排布为通过修改编译器的链接脚本文件实现。
所述的步骤(4)对比原版嵌入式软件机器码、t版嵌入式软件机器码可以使用Beyond Compare软件。
所述的步骤(5)中的根据变化的机器码地址和长度得到t版嵌入式软件对应的微增量机器码的方位为以二进制码流的形式读取t版软件机器码中指定地址长度的内容,然后得到对应的微增量机器码。
所述的步骤(6)中的第二设定阈值长度为30个字。
本发明与现有技术相比的优点在于:
(1)本发明方法与现有技术方法相比,使嵌入式软件在轨维护功能受原版嵌入式软件的限制非常小,能够在原版嵌入式软件的任意位置进行任意数量的修改;
(2)本发明方法与现有技术方法相比,使各版本在轨嵌入式软件机器码的变化区域非常明显且便于识别剥离,另外在正常功能需求变化的基础上减小了机器码的增量变化,使在线维护的上注量、上注次数和存储空间需求尽量小;
(3)本发明方法与现有技术方法相比,避免了在轨进行机器码比对和复杂运算的过程,通过遍历链节信息即可实现嵌入式软件重组与加载,实现效率高,同时还保留了航天器在轨运行的需要的多套功能需求软件,可以根据功能需求变化随时切换;
(4)本发明方法在嵌入式软件在轨维护过程中,保证总有一版本的嵌入式软件在轨正常使用,不会因为在轨维护时软件上注或加载失败而使航天器系统崩溃,提高了在轨维护的可靠性。
附图说明
图1为本发明的嵌入式软件在轨维护方法流程图;
图2为本发明的嵌入式软件设计规则约定的软件机器码组成结构图;
图3为本发明的机器码增量变化规则与实现原理图;
图4为本发明的EEPROM存储使用规则图;
图5为本发明的链表维护信息存放格式图;
图6为本发明的基于查找链表维护信息的软件加载流程。
具体实施方式
本发明提出一种航天器嵌入式软件在轨维护方法,下面结合附图和实施例进行详细说明,如图1所示,本发明的实施步骤如下:
(1)按照“在轨维护嵌入式软件设计规则”设计航天器发射时固化落焊在PROM中的原版嵌入式软件:嵌入式软件设计规则首先要求软件对应的机器码必须按照数据段、代码段、堆和栈的顺序依次排布,如图2所示。其次是在代码段的后面需要预留软件代码增加区的空间。
原版软件必须遵循此设计规则进行软件设计,确保软件可在轨维护。实现机器码按照图2所示的顺序排布的方法是通过修改编译器的链接脚本文件实现的,尽管不同的嵌入式软件开发平台不同,但其方法是相通的,以基于SPARCV8指令集的软件开发平台SparcDeveloper suite开发软件为例,修改机器码段顺序的方法可通过修改链接脚本文件linksparc.ld来实现,在脚本文件中首先写data段,然后是BSS段、代码段,最后是堆栈段,实现机器码段交换的链接脚本如下所示:
(2)根据在轨软件功能需求变化设计新版软件,新版软件设计仍然遵循维护软件设计规则,比较新版与原版软件源代码,确定新版软件需要改变的软件代码位置和内容,然后将原版嵌入式软件对应的机器码划分为多个“机器码未改变区”、“机器码变化识别区”,区域划分需依据软件源代码进行。所述的“机器码未改变区”为初始嵌入式软件对应的机器码未改变的区域;所述的“机器码变化识别区”为初始嵌入式软件对应的机器码改变的区域;各区段的划分如图3中原版软件的机器码分布图所示。尽管此刻由于“机器码变化识别区”代码长度的变化会使“机器码未改变区”的内容由于引用指针的变化进而使对应的机器码发生变化,但即使有这些变化也应该将此类代码划分为“机器码未改变区”,因为这些变化可以通过后续介绍的可控编译技术进行消除。
(3)应用可控编译技术调整新版软件源代码,识别获取微增量机器码。可控编译技术是保证“机器码未改变区”不受“机器码变化识别区”内容改变而影响的一种有效手段,也是软件实现在轨维护最小量上注的一种有效方法。由于软件代码经常因为修改一个软件指令源代码而导致整个软件代码段发生较大的变化。这是因为软件修改后,软件大小发生了变化,和未更改之前相比,软件对应机器码的存放相对位置发生了变化,软件中涉及跳转指令接口地址的所有代码段都相应发生了变化。因此,要实现软件代码的微增量变化,软件设计除遵守本发明提出的设计规则外,还应使用可控编译技术和机器码比对技术,这些技术的核心思想是保证软件代码未发生变化部分对应的机器码的相对位置不发生改变,从而使软件中未发生变化且涉及跳转指令接口地址的所有代码都不会发生变化,具体实现原理与机器码增量变化规则如图3所示:
首先找到软件代码(源代码)发生变化的位置和内容,然后在原版软件对应的机器码中找到发生变化的位置和机器码长度,即将嵌入式软件的机器码分为若干个“机器码未改变区”,若干个“机器码变化识别区”,随后根据这段变化的机器码长度,设计新版软件软件代码,如果新版软件代码编译后对应的机器码长度与之相等则直接获得“机器码等长代码替换区”的机器码,如果对应的机器码长度变小则通过添加空操作指令使其获得“机器码等长代码替换区”的机器码,如果对应的机器码长度变长则通过无条件长跳转指令和一定的空操作指令获得“机器码等长代码替换区”,并将增加的机器码通过编译器放置在原版软件机器码的“代码段”的末尾进行增加,即获得“机器码增加区”的机器码,机器码增加完毕再通过无条件长跳转指令和一定的空操作指令跳回“机器码等长代码替换区”的末尾,保持新版软件机器码的连续性。
以Sparc Developer suite软件开发平台为例,原版软件是将32bit的test_data的数据最低8位左移位操作变成最高8位,然后将sjzrWord数组的第6个字的最低16位加和至test_data的中间16位;新版软件是将test_data的数据最低8位左移位操作变成最高8位,然后将sjzrWord数组的第6个字的最低16位乘以2后再加和至test_data的中间16位,功能变化虽不多,但生成的机器码若不使用可控编译技术将发生很大的变化,若使用可控编译技术,则能保证机器码变化仅发生在“机器码变化识别区”和软件代码段末尾的“机器码增加区”,具体实现方法如下:
第一步,识别原版软件中发生变化的源代码对应的机器码及空间:
源码:test_data=(test_data<<24)+((sjzrWord[5]&0xffff)<<8);
机器码:400037c8:31 10 00 01 sethi%hi(0x40000400),%i0
…………………………
40003800:f0 26 c0 00 st%i0,[%i3]
第二步,等长代码变换(用第二步的源码替换第一步的源码):
源码:asm("b zengliang");asm("nop");……//(共13个占位nop)
asm("dengchang:nop");
机器码:400037c8:10 80 0c 63 b 40006954<zengliang>
400037cc:01 00 00 00 nop
…………………
40003800<dengchang>:asm("dengchang:nop");
第三步,编写增量代码:
源码:asm("zengliang:nop");
test_data=(test_data<<24)+(((sjzrWord[5]&0xffff)*2)<<8);
asm("b dengchang");
asm("nop");
机器码:40006954<zengliang>:
40006954:01 00 00 00 nop
…………………
400069c8:10 bf f3 8e b 40003800<dengchang>
400069cc:01 00 00 00 nop
按照上述方法设计新版软件以后,将增加的软件代码放置在最后一个链接的.O文件(如main.o)对应的.C文件(main.c)的末尾,然后重新编译链接生成机器码。
(4)使用机器码比对技术,分析校正可控编译技术生成的新版机器码文件是否符合要求。通过机器码比对软件Beyond Compare比对原来的机器码和功能变化后的新版软件的机器码,就可识别微增量变化的机器码地址和长度,微增量变化的机器码也就是“机器码等长代码替换区”和“机器码增加区”的内容。比较Beyond Compare获得的“机器码等长代码替换区”的地址和长度是否和步骤(2)所述的“机器码变化识别区”相同,同时也比较两个“机器码未改变区”的地址和长度是否相同,若相同则进行下一个步骤,若不同,重新进行步骤(2)~步骤(4)的操作。
(5)按照航天器EEPROM的使用规则生成微增量机器码文件。此规则是指EEPROM前面10KB存储空间用于存放链表维护信息,其后存放用于组成不同版本软件维护的微增量机器码,每个版本软件的微增量机器码使用一段连续的存储区域。EEPROM存储使用规则图如图4所示。然后将步骤(4)识别出的新版软件相对原版软件的微增量变化机器码从新版软件机器码中逐一分离,分离方法可以使用UltraEdit软件辅助Microsoft word查找替换功能以及记事本复制粘贴的方式实现,也可以编写专用软件代码分离程序以二进制码流的形式读取原版软件机器码中指定地址和长度的内容,然后生成新的微增量码二进制文件。最后按EEPROM约定的使用规则,将微增量代码规划好的EEPROM存放首地址信息写在微增量码文件的前4个字节处。
(6)按照链表维护信息规则生成链表维护信息文件:链表维护信息是用于描述软件组成及存放信息的,它以约定的形式存放于航天器的可擦写软件存储器中,如EEPROM。它首先将一个软件机器码的组成信息(包括机器码未改变段或软件上注的机器码等长替换段或机器码增加段等多个机器码段的地址、长度信息)以链节的形式记录下来,每个链节都包含下一个链节的存放地址,多个有序链节形成链条用于寻址整版软件。然后将软件版本信息、软件组成信息、软件链条信息和维护bootloader程序以约定的格式在存放在EEPROM中进行管理,这些按规定格式存储的数据我们称之为链表维护信息,软件的链表维护信息如图5所示。由图可见,所谓的链表维护信息就是存放于EEPROM中的地址为0x10000000~0x1000287F地址中的数据内容。软件版本信息包含航天器嵌入式系统平台目前所拥有的软件总版数和当前运行的软件版本号;软件组成信息包含一套软件机器码组成段的个数(即链节个数)和第一个软件机器码段(第一个链节)在航天器EEPROM中的存储绝对位置、软件校验和以及软件微增量机器码的存放起始地址等;软件链节信息通过后续的每个机器码组成段在航天器EEPROM中的存储绝对位置和下一个链节的存放地址获得。每次链表信息维护时不需要整个改变这个区域的内容,仅需更改当前对应的软件版本信息、软件信息和链节信息,甚至可以按存放字节进行修改维护。
(7)将步骤(5)生成的微增量机器码文件和步骤(6)生成的软件链表维护信息文件按照天地各航天器通讯链路中的协议上注至航天器,然后根据上注微增量机器码文件和软件链表维护信息文件中的存放地址将上注文件中的数据内容写至指定的EEPROM位置。在SRAM中运行的原版和新版软件均有内容下泄功能,可以根据内存下泄指令随时下传EEPROM中的内容进行正确性判断,如果判断为错误则重复步骤(7)重新进行上注。
软件上注决定着软件在轨维护的功能是否能可靠实现,因此其通讯协议起着至关重要的作用。软件上注主要分成三步,第一步是先发送上注控制字命令,用于确定一个软件上注开始、航天器设备存放上注代码的开始地址和上注数据的大小,然后是按照通讯协议上注软件维护数据内容(微增量机器码和链表维护信息),上注数据完成后,再次发送上注控制字命令,结束一个软件上注。软件上注控制字的指令格式及各项内容含义详见
表1和表2,软件上注数据字的格式如表3所示。为了可靠的实现软件上注,每次上注都会产生对应的遥测状态进行判断此次上注是否成功,上注状态遥测及其各项内容含义如表4和表5所示。
表1软件上注控制字指令格式
B0…………………………B7 | B8……………………………B15 | |
数据字0 | 启停信息(HB) | 启停信息(LB) |
数据字1 | 开始地址(HW HB) | 开始地址(HW LB) |
数据字2 | 开始地址(LW HB) | 开始地址(LW LB) |
数据字3 | 注入数据长度(HB) | 注入数据长度(LB) |
数据字4 | 校验和(HB) | 校验和(LB) |
表2软件上注控制字各项内容含义
表3软件上注数据字格式
数据字从存储于模拟地面控制设备中的文件读出,当文件长度大于30个字时,自动分成多帧向上传输,当前发送的帧数(第几帧)作为帧序号向上传输,帧序号从1开始,当数据长度不满足30个字时,“数据内容”用填零处理(校验和除外)。
表4软件上注状态遥测
表5软件上注状态遥测各项含义
校验和是否正确:“0”,表示不正确,1表示正确。注入状态:1表示正在注入,0表示空闲,1状态只能发送停止控制信息,0状态才可以发开始注入控制信息。由于内存下泄的方法与相关通讯协议较为通用,一般的航天器用于内存下泄的协议基本能够满足需求,故不作赘述。
(8)应用基于查找链表的高可靠软件加载与重组技术实现新版软件的加载运行。所述“基于查找链表的高可靠软件加载与重组技术”是指软件上注完成后,设备接收航天器“直接指令”切换至软件维护加载状态,然后设备重启,软件跳转至维护Bootloader继续运行,维护Bootloader程序依据当前运行软件版本号确定使用哪套软件,然后选择对应的软件维护链条信息,进行整个链条依序索引的机器码累加和校验,如果校验结果等于链表维护信息中的软件校验和信息,则使用维护Bootloader程序按照该版软件的链条信息搬移软件代码并加载至航天器SRAM中,否则重复步骤(8)继续等待接收“直接指令”切换至原版软件加载状态或重新索引链条信息直至校验正确,与此同时设备将加载是否成功状态生成直接遥测下传。软件机器码搬移完成后设备运行SRAM中软件,至此完成整个嵌入式软件的在轨维护功能。
基于链表维护信息的软件加载技术是以特定的Bootloader程序按照链表维护信息的格式进行搬移、加载的方法。软件加载与实现流程如图6所示,首先通过直接指令预置软件选择端口状态,然后系统上电,通过零地址的PROM中Bootloader软件选择加载PROM中的软件还是EEPROM中的软件,若为加载PROM中的软件,则直接搬移PROM中后续的软件机器码进行原版软件加载。当确定为维护加载状态,软件跳转至EEPROM首地址执行,维护Bootloader程序将依据0x10000401H的当前软件版本号确定使用第几版软件,若为第一版本软件则从0x10000402H开始读取第一版本软件的第一个链节的开始地址和链节数,然后按照规则从0x10000480H地址指向的内容读取第一个链节指向的软件机器码内容,读取完第一个链节指向的机器码后,根据第一个链节的尾指针获取第二个链节的位置,然后链节数自加并判断是否完成整个软件的读取,若未完成则继续读取第二个链节指向的软件代码内容,依此类推完成整个软件机器码的读取,然后进行机器码累加和校验判断软件校验是否正确,若正确则按照上述方法搬移软件机器码至SRAM中并运行。若不正确自动跳转回PROM中的Bootloader软件,继续依据直接指令选择加载状态,切换回原版软件运行或直至校验正确为止。每次累加和校验完成,都将会生成加载是否成功的直接状态遥测来判断软件加载状态,从而实现多版软件的选择与加载。
为提高系统可靠性,上电后PC指针指向零地址PROM区,直接指令加载选择默认状态为Bootloader加载PROM中的软件进行工作,使航天器嵌入式系统在任何时刻断电重启后都可以切回至固化在PROM中的软件,确保航天器在轨始终有一版本软件可以正常工作,避免因软件上注失败、空间单粒子效应以及EEPROM的可更改性而使新注入EEPROM中的软件不能正常工作而失效。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (6)
1.一种航天器嵌入式软件在轨维护方法,其特征在于包括如下步骤:
(1)按照软件功能需求设计原版嵌入式软件,将原版嵌入式软件对应的机器码按照数据段、代码段、堆和栈的顺序依次排布,并在代码段后预留第一设定阈值长度的空间作为机器码增加区,然后将原版嵌入式软件固化落焊在航天器PROM中运行;
(2)在原版嵌入式软件运行过程中,根据在轨嵌入式软件功能需求变化设计t版嵌入式软件,并比较t版嵌入式软件源代码与原版嵌入式软件源代码,得到t版嵌入式软件需要改变的源代码位置和内容,进而得到原版嵌入式软件机器码需要改变的机器码地址及长度,然后将原版嵌入式软件机器码划分为多个机器码未改变区、机器码变化识别区,并对各个机器码变化识别区对应的t版嵌入式软件的源代码进行编译得到其机器码并依次判断;所述的机器码未改变区为原版嵌入式软件机器码未改变的区域;所述的机器码变化识别区为原版嵌入式软件机器码改变的区域,t的初值为1且为正整数;
(3)如果原版嵌入式软件机器码变化识别区对应的t版嵌入式软件机器码长度等于当前机器码变化识别区机器码长度,则用当前机器码变化识别区对应t版嵌入式软件机器码直接替换当前机器码变化识别区机器码;
如果变化识别区对应的t版嵌入式软件机器码长度大于当前机器码变化识别区机器码长度,则将当前机器码变化识别区对应的t版嵌入式软件机器码放入当前机器码变化识别区与机器码增加区,并在当前机器码变化识别区末位置添加跳转至机器码增加区中t版嵌入式软件机器码首位置的无条件长跳转指令,在机器码增加区中t版嵌入式软件机器码末位置添加跳转至与当前机器码变化识别区末位置相邻机器码的无条件长跳转指令;
如果变化识别区对应的t版嵌入式软件机器码长度小于当前机器码变化识别区机器码长度,则将变化识别区对应的t版嵌入式软件机器码放入当前变化识别区,并使用空操作指令填补使当前机器码长度等于变化识别区机器码长度,得到t版嵌入式软件源代码机器码;
(4)对比原版嵌入式软件机器码、t版嵌入式软件机器码得到变化的机器码地址和长度后与步骤(2)中寻找到的需要改变的机器码地址及长度对比并判断,如果两者相同,则转入步骤(5),否则重复步骤(2)-步骤(3);
(5)根据变化的机器码地址和长度得到t版嵌入式软件对应的微增量机器码,分别获取t版嵌入式软件中各个机器码变化识别区与机器码增加区中机器码在航天器EEPROM的存放地址长度、t版嵌入式软件中各个机器码未改变区中机器码在航天器PROM中的存放地址长度并形成其对应的链节信息,并将下一链节的存放地址放入上一链节信息中,得到t版嵌入式软件中各个机器码变化识别区、机器码增加区与机器码未改变区对应的链节信息后组合得到t版嵌入式软件对应的链条,进而得到t版嵌入式软件对应的软件链表维护信息,其中,各个机器码未改变区、机器码变化识别区、机器码增加区均对应一个链节信息;所述微增量机器码为t版嵌入式软件中各个机器码变化识别区、机器码增加区中变化的机器码,其中,各个机器码变化识别区、机器码增加区均对应一段微增量机器码;所述链条开始地址为当前版本嵌入式软件中第一个链节信息的存放地址;所述软件链表维护信息包括链条开始地址、链节数、软件校验和、微增量机器码及其在航天器EEPRM中的存放地址长度、当前嵌入式软件版本号、链节信息;
(6)发送上注控制字指令至航天器并控制航天器接收数据,然后对微增量机器码与软件链表维护信息以第二设定阈值长度进行分帧后得到多个数据包,依次将数据包上注至航天器EEPROM,计算每个上注完成的数据包的累加和并与其对应的校验和进行对比,如果两者相等,则该数据包上注完成,否则发送指令控制地面重复上注该数据包直至数据包的累加和与其对应的校验和相等,在所有数据包上注结束时重复发送上注控制字指令来控制航天器结束接收数据,其中,在对微增量机器码与软件链表维护信息以第二设定阈值长度进行分帧时,如果最后一帧数据长度小于设阈值,则通过填零使最后一帧数据长度为设定阈值长度,数据包包括该数据包的校验和;所述上注控制字指令包括微增量机器码与软件链表维护信息在航天器EEPROM的存放开始地址、数据长度及校验和;
(7)等待下次在轨嵌入式软件功能需求变化,并监测地面发送的直接指令,当在轨嵌入式软件功能需求变化时,使t=t+1,并重复步骤(2)-步骤(6)完成新的在轨维护,然后等待下次在轨嵌入式软件功能需求变化,并监测地面发送的直接指令,当地面发送直接指令时,转入步骤(8);
(8)根据直接指令使用搬移程序搬移原版嵌入式软件机器码或k版嵌入式软件机器码并搬至航天器SRAM中,然后计算航天器SRAM中k版嵌入式软件机器码累加和并与其校验和对比,如果两者不相等,则重复步骤(8)直至两者相等,如果两者相等,则执行k版嵌入式软件,并转入步骤(7),其中,k=1,2,3,…,t。
2.根据权利要求1所述的一种航天器嵌入式软件在轨维护方法,其特征在于:所述的步骤(1)第一设定阈值长度的取值范围为代码段长度的10%。
3.根据权利要求1或2所述的一种航天器嵌入式软件在轨维护方法,其特征在于:所述的步骤(1)中将t版嵌入式软件对应的机器码按照数据段、代码段、堆和栈的顺序依次排布为通过修改编译器的链接脚本文件实现。
4.根据权利要求1或2所述的一种航天器嵌入式软件在轨维护方法,其特征在于:所述的步骤(4)对比原版嵌入式软件机器码、t版嵌入式软件机器码可以使用Beyond Compare软件。
5.根据权利要求1或2所述的一种航天器嵌入式软件在轨维护方法,其特征在于:所述的步骤(5)中的根据变化的机器码地址和长度得到t版嵌入式软件对应的微增量机器码的方位为以二进制码流的形式读取t版软件机器码中指定地址长度的内容,然后得到对应的微增量机器码。
6.根据权利要求1或2所述的一种航天器嵌入式软件在轨维护方法,其特征在于:所述的步骤(6)中的第二设定阈值长度为30个字。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510164376.0A CN104820586B (zh) | 2015-04-09 | 2015-04-09 | 一种航天器嵌入式软件在轨维护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510164376.0A CN104820586B (zh) | 2015-04-09 | 2015-04-09 | 一种航天器嵌入式软件在轨维护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104820586A CN104820586A (zh) | 2015-08-05 |
CN104820586B true CN104820586B (zh) | 2018-05-22 |
Family
ID=53730890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510164376.0A Active CN104820586B (zh) | 2015-04-09 | 2015-04-09 | 一种航天器嵌入式软件在轨维护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104820586B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020812B (zh) * | 2016-05-16 | 2019-01-11 | 北京控制工程研究所 | 一种针对dsp平台航天器软件的动态在轨维护方法 |
CN106547601B (zh) * | 2016-12-05 | 2019-09-13 | 北京航天自动控制研究所 | 一种在线软件烧写装置及方法 |
CN107315587B (zh) * | 2017-06-21 | 2020-08-14 | 北京控制工程研究所 | 一种基于二次链接的航天器在轨维护注入码生成方法 |
CN107566028A (zh) * | 2017-07-07 | 2018-01-09 | 南京航空航天大学 | 一种基于VxWorks的卫星在轨文件更新方法 |
CN108052355B (zh) * | 2017-11-22 | 2020-12-15 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 星载载荷单元软件在轨重组方法 |
CN109444917B (zh) * | 2018-10-09 | 2020-09-18 | 中国人民解放军国防科技大学 | 基于微纳卫星集群的空间站外部结构检测维修系统及方法 |
CN110569051B (zh) * | 2019-08-02 | 2023-05-23 | 山东航天电子技术研究所 | 一种支持预启动的飞行程序在轨维护与验证方法 |
CN110908706B (zh) * | 2019-11-28 | 2023-10-17 | 上海电气富士电机电气技术有限公司 | 一种多版本软件的管理方法 |
CN111209059B (zh) * | 2020-01-14 | 2023-03-03 | 中国北方车辆研究所 | 一种嵌入式软件多版本控制系统及方法 |
CN111580844B (zh) * | 2020-05-09 | 2024-02-02 | 上海航天电子通讯设备研究所 | 支持在轨动态更新的软硬件协同的应用程序维护方法 |
CN112328303B (zh) * | 2020-09-29 | 2024-04-02 | 北京空间飞行器总体设计部 | 一种基于差异化算法的航天器软件在轨增量重构方法 |
CN115291967B (zh) * | 2022-08-01 | 2023-05-23 | 中国人民解放军32039部队 | 航天数据分析方法、装置和电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101067791A (zh) * | 2007-06-28 | 2007-11-07 | 中兴通讯股份有限公司 | 启动芯片软件版本信息设置方法和装置 |
CN102799502A (zh) * | 2012-06-28 | 2012-11-28 | 航天恒星科技有限公司 | 一种星载嵌入式软件在轨维护方法 |
CN102880494A (zh) * | 2012-09-26 | 2013-01-16 | 浙江大学 | 一种用于微小卫星系统的局部代码更新方法及其系统 |
CN103226484A (zh) * | 2013-04-15 | 2013-07-31 | 浙江大学 | 一种星载综合电子系统程序的在轨更新方法 |
CN103268284A (zh) * | 2013-05-14 | 2013-08-28 | 北京控制工程研究所 | 一种星敏感器在轨维护方法 |
CN103777983A (zh) * | 2014-01-24 | 2014-05-07 | 航天东方红卫星有限公司 | 一种星载软件在轨维护及升级方法 |
-
2015
- 2015-04-09 CN CN201510164376.0A patent/CN104820586B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101067791A (zh) * | 2007-06-28 | 2007-11-07 | 中兴通讯股份有限公司 | 启动芯片软件版本信息设置方法和装置 |
CN102799502A (zh) * | 2012-06-28 | 2012-11-28 | 航天恒星科技有限公司 | 一种星载嵌入式软件在轨维护方法 |
CN102880494A (zh) * | 2012-09-26 | 2013-01-16 | 浙江大学 | 一种用于微小卫星系统的局部代码更新方法及其系统 |
CN103226484A (zh) * | 2013-04-15 | 2013-07-31 | 浙江大学 | 一种星载综合电子系统程序的在轨更新方法 |
CN103268284A (zh) * | 2013-05-14 | 2013-08-28 | 北京控制工程研究所 | 一种星敏感器在轨维护方法 |
CN103777983A (zh) * | 2014-01-24 | 2014-05-07 | 航天东方红卫星有限公司 | 一种星载软件在轨维护及升级方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104820586A (zh) | 2015-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104820586B (zh) | 一种航天器嵌入式软件在轨维护方法 | |
CN101799763B (zh) | 内核在线补丁的方法、装置和系统 | |
CN101557583B (zh) | 直放站设备嵌入式软件的远程升级与版本切换方法 | |
CN102799502A (zh) | 一种星载嵌入式软件在轨维护方法 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN106371940B (zh) | 一种程序崩溃解决方法及装置 | |
US20080196019A1 (en) | Method and Apparatus for Generating an Update Package | |
CN105487885B (zh) | 手游热更新方法 | |
CN103473067A (zh) | 嵌入式Linux分区与数据还原方法、系统及系统开发方法 | |
CN104298534B (zh) | 基于Lua语言的编程方法和装置 | |
CN103226484A (zh) | 一种星载综合电子系统程序的在轨更新方法 | |
CN102722387B (zh) | 动态打补丁的方法和装置 | |
CN107357622B (zh) | 热补丁实现方法及通信设备 | |
CN103677862A (zh) | Epld程序的升级方法及装置 | |
CN105589729A (zh) | 一种基于嵌入式虚拟机的动态编译的方法及装置 | |
CN106874195A (zh) | 一种针对android应用的bug修复和持续交付方案 | |
US20100031246A1 (en) | Updating Content Without Using a Mini Operating System | |
CN101520733B (zh) | 装载类的方法和装置及重组类存档文件方法 | |
CN103645888A (zh) | 一种自动构建操作系统的系统及方法 | |
CN111142922B (zh) | 应用程序更新方法、装置、终端及服务器 | |
CN100533404C (zh) | 加快从计算机下载数据到单片机目标存储器的方法及系统 | |
CN100359485C (zh) | 嵌入式系统的测试装置及测试方法 | |
CN106020812B (zh) | 一种针对dsp平台航天器软件的动态在轨维护方法 | |
CN115373707A (zh) | 航天器实时系统内存受限条件下任务在线更新系统及方法 | |
CN108958737A (zh) | 一种星载软件在轨编程方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |