CN102508657B - 一种航天器嵌入式软件模块维护方法 - Google Patents
一种航天器嵌入式软件模块维护方法 Download PDFInfo
- Publication number
- CN102508657B CN102508657B CN201110316979.XA CN201110316979A CN102508657B CN 102508657 B CN102508657 B CN 102508657B CN 201110316979 A CN201110316979 A CN 201110316979A CN 102508657 B CN102508657 B CN 102508657B
- Authority
- CN
- China
- Prior art keywords
- function
- software
- module
- spacecraft
- address
- 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
一种航天器嵌入式软件模块维护方法,(1)设计实现航天器飞行软件;(2)设计、实现被修改的模块或函数,(3)完成嵌入式软件模块或函数的维护,具体通过建立一张存储飞行软件所有模块(或函数)的入口地址映射表,软件固化时此地址表为默认状态。以后对模块(或函数)修改时,将修改后模块(或函数)的执行代码存储入内存空间,同时修改地址映射表,将修改前的模块(或函数)指向改变为修改后模块(或函数)的入口,即可实现调用关系的变化,达到任意模块(或函数)修改或维护的目的。
Description
技术领域
本发明公开了一种嵌入式软件模块维护方法,涉及空间电子领域,尤其涉及航天器总体设计、航天器嵌入式计算机系统以及空间信息处理系统方法。
背景技术
随着计算机技术和软件技术的发展,具有高度自治性和灵活性的实时嵌入式系统在国内的航天器中得到了广泛的应用。这些嵌入式系统往往具有较高的长时间运行的自治性和可靠性的要求。因此,对系统的在轨维护能力提出了迫切的要求,主要表现在两个方面:(1)软件在长期的运行当中,可能会暴露出一定的设计缺陷,或是测试时没有发现和排除的程序设计错误,需要进行及时的修正与完善;(2)为了适应环境、提高性能或克服运行中遇到的困难,可能会对系统提出新的任务需求,需要增加新的功能或修改原有的功能,或者要应用最新的技术等等。
目前,航天器嵌入式软件维护的方法主要分成三种:
(1)可以利用测控指令对软件的运行参数进行修改:航天器软件接收到地面上行的指令,对指令进行处理,按照指令中的设定内容对运行参数、处理参数或控制参数进行修改,以改变软件的运行状态。
(2)可以利用测控指令干预软件的任务调度:航天器软件接收到地面上行的指令,对指令进行处理,按照指令中的设置,可以完成现有任务(或线程)的删除、挂起等操作;也可以完成新任务(或线程)的创建,将新任务的运行体指向存储空间的某区域,达到增加新功能的目的。
(3)利用图1所示的一种航天器飞行软件维护系统构架,当要废除PROM1中的飞行软件时,可以利用地面测控系统指令,启动PROM2中的维护软件,接收地面上行的新的软件程序数据,存储于RAM中,并启动RAM中的新程序,达到废除整套PROM1中的飞行软件,重新定制一套新软件的目的。
以上三种方法,都具有特定的使用场合,从维护的层面上来讲,都有一定的局限性,第(1)种方法只能改变参数,不能改变软件的逻辑结构,当软件中发现错误时,是不能完成修改的;第(2)种和第(3)种方法维护的粒度较粗,如果某个模块(或函数)发生了错误,均需要实施较复杂的过程,尤其是第(3)种方法,需要上行传输很大的数据量,占用较长时间。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供一种航天器嵌入式软件模块维护的方法,该方法可以实施软件中任意模块(或函数)的修改,软件维护、修改的粒度小。
本发明的技术解决方案是:一种航天器嵌入式软件模块维护方法,步骤如下:
(1)设计实现航天器飞行软件;所述的飞行器软件设计要求如下:
(1.1)建立存储飞行软件所有模块或函数入口地址的映射表,软件运行按照映射表中的地址进行调用;
(1.2)静态分配一段空白空间,用于存储修改后的模块或函数的执行代码;
(1.3)软件编译链接后,获得软件对存储器的使用地址映射表;
(1.4)制定一个内存修改的遥控指令格式:当接收到内存修改遥控指令后,按照指令中规定的内存起始地址顺序写入规定数量的规定数据;
(2)设计、实现被修改的模块或函数,具体步骤如下:
(2.1)对被修改的模块或函数进行重新编码;
(2.2)利用步骤(1.3)中得到的软件对存储器的使用地址映射表,定位被修改模块或函数的入口地址和全局变量地址;
(2.3)对步骤(2.1)重新编码后的模块或函数进行编译链接生成可执行代码,将可执行代码定位于步骤(1.2)预留的空白空间;
(3)完成嵌入式软件模块或函数的维护,具体如下:
(3.1)将步骤(2.3)生成的可执行代码按照步骤(1.4)制定的内存修改遥控指令格式生成遥控指令;
(3.2)在步骤(1.3)获得的地址映射表中查找需要被修改的模块或函数的入口地址映射的位置,按照步骤(1.4)制定的内存修改指令格式生成遥控指令,将被修改的模块或函数的入口地址映射的位置中的内容改为修改后的模块或函数的入口地址;
(3.3)将步骤(3.1)生成的遥控指令发送至航天器,发送完毕并确认后,将步骤(3.2)生成的遥控指令发送至航天器,完成软件模块或函数的修改。
当维护需要在软件中增加新功能时,需要在步骤(1)中任何位置增加一个步骤,即设计航天器飞行软件时留有空任务或空线程;将新增功能的软件代码编译将可执行代码发送至航天器存储区,将空任务(或线程)的入口地址更改为新增功能的可执行代码的入口地址。
当维护需要在软件中删除新功能时,需要在步骤(1)中任何位置增加一个步骤,即设计航天器飞行软件时设计一个空模块或空函数,将被删除功能模块或函数的入口地址指向该空函数。
本发明与现有技术相比有益效果为:
(1)传统方式中当模块或函数出问题时,只能改后的执行代码重新覆盖原模块或函数空间,于是无法预料改后的状态,空间够用不够用是很难确定的。本发明通过建立一张存储飞行软件所有模块(或函数)的入口地址映射表,软件固化时此地址表为默认状态。以后对模块(或函数)修改时,将修改后模块(或函数)的执行代码存储入内存空间,同时修改地址映射表,将修改前的模块(或函数)指向改变为修改后模块(或函数)的入口,将直接寻址跳转变为间接寻址跳转即可实现调用关系的变化,达到任意模块(或函数)修改或维护的目的。
(2)被维护的软件位于航天器上,被维护的模块(或函数)只是软件中很小的一部分,必然和航天器不需要维护的模块(或函数)存在耦合关系,会调用软件中的其余模块(或函数)或使用全局变量。本发明通过获取软件对存储器的使用地址映射表,可以定位软件中各模块(或函数)的入口地址和全局变量地址,如果需要使用飞行软件中其它模块(或函数)或全局变量,那么可以直接对地址的对象进行操作,方法简单、可靠性强。
附图说明
图1为现有技术中一种飞行软件维护的系统构架图;
图2为本发明方法流程图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为使本发明技术方案的优点更加清楚,下面结合附图和实施例对本发明做出详细说明。
如图2所示,本方法发明的实施步骤如下:
101、设计、实现航天器飞行软件,此软件最终固化在航天器上,若想要实现本发明的方法,则在飞行软件中必须采取必要的措施:
101a、建立一张存储飞行软件所有模块(或函数)入口地址的映射表,软件运行按照映射表中的地址进行调用。假定软件由func1、func2、func3三个函数和主函数组成,可以按下面的例子实现:
上例中func1_ptr、func2_ptr、func3_ptr组成了该地址映射表。
101b、软件中留有足够的空白空间,可用于将来存储修改后的模块(或函数)的执行代码,这段空间是静态分配的,不使用动态分配的方法,便于编译链接后定位这段空间的地址。例如101a所示例子中char mon[512*1024]就是为将来存储修改后的模块(或函数)的预留空间。预留空白空间的大小要依据具体的需求而定,航天器软件设计的组织应根据自己的能力和经验统计,对产品中的可能缺陷量或者需求的不确定性进行评估,留出适量的空间。空间小了可能导致发现了缺陷不能进行维护,空间大了会造成空间的浪费,使用者需要根据实际情况综合考虑。
101c、软件编译链接后,利用开发环境提供的工具获得软件对存储器的使用地址映射表。例如101a所示例子的代码段空间地址和每个模块的入口地址、func1_ptr地址、func2_ptr地址、func3_ptr地址、mon地址。该地址映射表应在航天器发射后妥善保存,用于后续软件维护使用。
101d、制定一个内存修改的遥控指令格式,飞行软件具备这样的功能:当接收到内存修改遥控指令后,能够按照指令中规定的内存起始地址顺序写入规定数量的规定数据。用于飞行软件需要维护时,使用地面测控系统与之进行数据交互。
例如一种内存修改的遥控指令格式如下表:
注:
1.指令序号为本条指令在整个航天器指令中的排序,便于软件辨识;
2.指令数据包长度为本条指令数据包的长度,包括指令序号、指令数据包长度本身、被修改内存的起始地址、被修改的数据长度、被修改后的数据序列、指令数据包校验和等部分的数据总长度,以字节为单位。
3.被修改内存的起始地址为被修改处内存的开始位置;
4.被修改的数据长度为本指令欲修改内存数据的总长度,以字节为单位;
5.被修改后的数据序列为内存修改的目标数据序列;
6.指令数据包校验和为指令序号到被修改后数据序列所有数据的累加和,保留低2字节。
102、设计、实现被修改的模块(或函数),包括以下内容:
102a、确定航天器飞行软件中某模块(或函数)需要修改后,应对该模块(或函数)重新编码。
102b、利用101c步骤中得到的软件对存储器的使用地址映射表,可以定位软件中各模块(或函数)的入口地址和全局变量地址,如果需要使用飞行软件中其它模块(或函数)或全局变量,那么可以直接对地址的对象进行操作。
102c、对修改后的模块(或函数)进行编译链接,应将可执行代码定位于软件中预留的空白空间,如101a例子中的mon地址空间。每进行一次这样的维护,应对预留空间的使用情况进行一次记录,以便于确定下一次维护时可用空间的起始地址。
103、在地面测控系统的配合下完成维护,包括以下步骤:
103a、将102c形成的可执行代码按照101d制定的内存修改指令格式生成遥控指令。
103b、在101c获得的地址映射表中查找需要被修改的模块(或函数)的入口地址映射的位置,按照101d制定的内存修改指令格式生成遥控指令,将被修改的模块(或函数)的入口地址映射的位置中的内容改为修改后的模块(或函数)的入口地址。
103c、地面测控系统首先将103a生成的指令发送至航天器,发送完毕并确认后,将103b生成的指令发送至航天器,即完成了模块(或函数)的修改。
利用上述的方法还可以实现航天器软件增加新功能或删除功能。在软件中增加新功能的方法:在执行101步骤时,将航天器软件留有空任务(或线程),当新增加功能时,则编写软件代码,编译、链接后,将可执行代码发送至航天器存储区,将空任务(或线程)的入口地址更改为新增功能的可执行代码的入口地址。在软件中删除功能的方法:在执行101步骤时,在航天器软件中设计有一个空模块(或函数),如果想要删除软件中的某个功能,则将被删除功能模块(或函数)的入口地址指向该空函数即可。
本发明实施例提供的航天器嵌入式软件模块维护方法,通过改变传统的软件设计方法,将模块(或函数)的调用由直接寻址方式变为间接寻址方式,可以实施软件中任意模块(或函数)的修改,是目前国内航天器嵌入式软件进行维护、修改的最小粒度。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替代,都应涵盖在本发明的保护范围内。
本发明未详细说明部分属于本领域技术人员公知常识。
Claims (3)
1.一种航天器嵌入式软件模块维护方法,其特征在于步骤如下:
(1)设计实现航天器嵌入式软件;所述的航天器嵌入式软件设计要求如下:
(1.1)建立存储航天器嵌入式软件所有模块或函数入口地址的映射表,软件运行按照映射表中的地址进行调用;
(1.2)静态分配一段空白空间,用于存储修改后的模块或函数的执行代码;
(1.3)软件编译链接后,获得软件对存储器的使用地址映射表;
(1.4)制定一个内存修改的遥控指令格式:当接收到内存修改遥控指令后,按照内存修改遥控指令中规定的内存起始地址顺序写入规定数量的规定数据;
(2)设计、实现被修改的模块或函数,具体步骤如下:
(2.1)对被修改的模块或函数进行重新编码;
(2.2)利用步骤(1.3)中得到的软件对存储器的使用地址映射表,定位被修改模块或函数的入口地址和全局变量地址;
(2.3)对步骤(2.1)重新编码后的模块或函数进行编译链接生成可执行代码,将可执行代码定位于步骤(1.2)预留的空白空间;
(3)完成嵌入式软件模块或函数的维护,具体如下:
(3.1)将步骤(2)生成的可执行代码按照步骤(1.4)制定的内存修改遥控指令格式生成内存修改遥控指令;
(3.2)在步骤(1.3)获得的使用地址映射表中查找需要被修改的模块或函数的入口地址映射的位置,按照步骤(1.4)制定的内存修改的遥控指令格式生成内存修改遥控指令,将被修改的模决或函数的入口地址映射的位置中的内容改为修改后的模块或函数的入口地址;
(3.3)将步骤(3.1)生成的内存修改遥控指令发送至航天器,发送完毕并确认后,将步骤(3.2)生成的内存修改遥控指令发送至航天器,完成软件模块或函数的修改。
2.根据权利要求1所述的一种航天器嵌入式软件模块维护方法,其特征在于:当维护需要在软件中增加新功能时,需要在步骤(1)中任何位置增加一个步骤,即设计航天器嵌入式软件时留有空任务或空线程;将新增功能的软件代码编译链接后,将可执行代码发送至航天器存储区,将空任务或空线程的入口地址更改为新增功能的可执行代码的入口地址。
3.根据权利要求1所述的一种航天器嵌入式软件模块维护方法,其特征在于:当维护需要在软件中删除新功能时,需要在步骤(1)中任何位置增加一个步骤,即设计航天器嵌入式软件时设计一个空模块或空函数,将被删除功能模块或函数的入口地址指向该空函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110316979.XA CN102508657B (zh) | 2011-10-18 | 2011-10-18 | 一种航天器嵌入式软件模块维护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110316979.XA CN102508657B (zh) | 2011-10-18 | 2011-10-18 | 一种航天器嵌入式软件模块维护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102508657A CN102508657A (zh) | 2012-06-20 |
CN102508657B true CN102508657B (zh) | 2014-10-08 |
Family
ID=46220749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110316979.XA Active CN102508657B (zh) | 2011-10-18 | 2011-10-18 | 一种航天器嵌入式软件模块维护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102508657B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880494B (zh) * | 2012-09-26 | 2016-02-10 | 浙江大学 | 一种用于微小卫星系统的局部代码更新方法及其系统 |
CN103092760B (zh) * | 2013-01-30 | 2015-11-11 | 北京控制工程研究所 | 一种软件修正性在轨维护优化方法 |
CN103268284B (zh) * | 2013-05-14 | 2017-01-18 | 北京控制工程研究所 | 一种星敏感器在轨维护方法 |
CN104750475B (zh) * | 2013-12-31 | 2018-05-25 | 深圳航天东方红海特卫星有限公司 | 一种卫星在轨重构框架系统和方法 |
CN105094784B (zh) * | 2014-05-20 | 2019-09-17 | 上海新跃仪表厂 | 基于sram的间址跳转模式的在轨编程方法及装置 |
CN105653244B (zh) * | 2014-11-10 | 2019-04-19 | 华为数字技术(苏州)有限公司 | 一种软件优化方法及装置 |
CN105487909B (zh) * | 2016-01-14 | 2018-12-28 | 江苏林洋能源股份有限公司 | 一种减少电力设备固件升级量的方法 |
CN106598641A (zh) * | 2016-10-27 | 2017-04-26 | 深圳市元征科技股份有限公司 | 基于行车电脑的程序刷写方法及装置 |
CN106959859B (zh) * | 2017-03-30 | 2021-08-24 | 北京奇虎科技有限公司 | 系统调用函数的调用方法与装置 |
CN107315587B (zh) * | 2017-06-21 | 2020-08-14 | 北京控制工程研究所 | 一种基于二次链接的航天器在轨维护注入码生成方法 |
CN113268368B (zh) * | 2021-04-26 | 2023-07-14 | 北京控制工程研究所 | 基于飞行任务剖面的组合体航天器安全关键数据维护方法 |
CN116501650B (zh) * | 2023-06-27 | 2023-09-12 | 航天科工火箭技术有限公司 | 运载火箭测控流程引擎的执行方法、装置及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101789938A (zh) * | 2010-01-12 | 2010-07-28 | 清华大学 | 可重构软件中基于代理的组件生成方法 |
US8032865B2 (en) * | 2001-07-26 | 2011-10-04 | Kyocera Corporation | System and method for field diagnosis of wireless communications device system software |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7987164B2 (en) * | 2008-01-09 | 2011-07-26 | Oracle International Corporation | Method and system for speeding up rebuild of user-defined indexes during partition maintenance operations in the database systems |
-
2011
- 2011-10-18 CN CN201110316979.XA patent/CN102508657B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8032865B2 (en) * | 2001-07-26 | 2011-10-04 | Kyocera Corporation | System and method for field diagnosis of wireless communications device system software |
CN101789938A (zh) * | 2010-01-12 | 2010-07-28 | 清华大学 | 可重构软件中基于代理的组件生成方法 |
Non-Patent Citations (2)
Title |
---|
殷维刚等.浅谈军用软件系统的后期维护与保障.《中国电子学会可靠性分会第十四届学术年会》.2008,第349-353页. |
浅谈军用软件系统的后期维护与保障;殷维刚等;《中国电子学会可靠性分会第十四届学术年会》;20081231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN102508657A (zh) | 2012-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102508657B (zh) | 一种航天器嵌入式软件模块维护方法 | |
US8566372B2 (en) | Method and device for dynamically loading relocatable file | |
CN104731569B (zh) | 一种数据处理方法及相关设备 | |
CN102147743A (zh) | 加快嵌入式系统应用程序启动速度的方法 | |
CN105487909B (zh) | 一种减少电力设备固件升级量的方法 | |
CN104679572B (zh) | 基于预加载机制的插件支持方法 | |
KR102077149B1 (ko) | 메모리 관리 방법 및 장치 | |
CN109213531A (zh) | 一种基于emif16的多核dsp上电自启动的简化实现方法 | |
CN112650539B (zh) | 面向异构众核处理器的动态链接运行支撑方法 | |
CN103744713A (zh) | 基于fpga的嵌入式双核系统的自主配置方法 | |
CN104750528A (zh) | 一种Android程序中的组件管理方法和装置 | |
CN112947856A (zh) | 一种内存数据的管理方法、装置、计算机设备及存储介质 | |
CN114138776A (zh) | 图结构和图属性分离设计的方法、系统、装置和介质 | |
CN114416031B (zh) | 面向AIoT场景支持RISC-V处理器的操作系统 | |
CN102004662A (zh) | 嵌入式可裁剪式虚拟机 | |
CN112596918A (zh) | 系统内各程序间共享变量的方法及存储装置 | |
CN104778087A (zh) | 一种信息处理方法以及信息处理装置 | |
CN101504613B (zh) | 用于受限系统的分布式动态二进制翻译方法 | |
CN104281604A (zh) | 生成Targetlink数据字典分层树的方法和系统 | |
CN103377034A (zh) | 指令预送方法及装置、指令管理系统、运算核心 | |
CN115328679A (zh) | 异构函数库的自动化集成方法、计算设备及其系统 | |
CN111831314B (zh) | 一种针对不可写分区打补丁的方法与装置 | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
CN104281443B (zh) | 利用tcm实现代码、数据替换的方法 | |
CN104657175A (zh) | 利用配置芯片实现启动引导和数据的读写系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |