一种航天器嵌入式软件模块维护方法

文档序号:6435774阅读:312来源:国知局
专利名称:一种航天器嵌入式软件模块维护方法
一种航天器嵌入式软件模块维护方法技术领域
本发明公开了一种嵌入式软件模块维护方法,涉及空间电子领域,尤其涉及航天器总体设计、航天器嵌入式计算机系统以及空间信息处理系统方法。
背景技术
随着计算机技术和软件技术的发展,具有高度自治性和灵活性的实时嵌入式系统在国内的航天器中得到了广泛的应用。这些嵌入式系统往往具有较高的长时间运行的自治性和可靠性的要求。因此,对系统的在轨维护能力提出了迫切的要求,主要表现在两个方面(1)软件在长期的运行当中,可能会暴露出一定的设计缺陷,或是测试时没有发现和排除的程序设计错误,需要进行及时的修正与完善;(2)为了适应环境、提高性能或克服运行中遇到的困难,可能会对系统提出新的任务需求,需要增加新的功能或修改原有的功能,或者要应用最新的技术等等。
目前,航天器嵌入式软件维护的方法主要分成三种
(1)可以利用测控指令对软件的运行参数进行修改航天器软件接收到地面上行的指令,对指令进行处理,按照指令中的设定内容对运行参数、处理参数或控制参数进行修改,以改变软件的运行状态。
(2)可以利用测控指令干预软件的任务调度航天器软件接收到地面上行的指令,对指令进行处理,按照指令中的设置,可以完成现有任务(或线程)的删除、挂起等操作;也可以完成新任务(或线程)的创建,将新任务的运行体指向存储空间的某区域,达到增加新功能的目的。
(3)利用图1所示的一种航天器飞行软件维护系统构架,当要废除PROMl中的飞行软件时,可以利用地面测控系统指令,启动PR0M2中的维护软件,接收地面上行的新的软件程序数据,存储于RAM中,并启动RAM中的新程序,达到废除整套PROMl中的飞行软件,重新定制一套新软件的目的。
以上三种方法,都具有特定的使用场合,从维护的层面上来讲,都有一定的局限性,第(1)种方法只能改变参数,不能改变软件的逻辑结构,当软件中发现错误时,是不能完成修改的;第( 种和第C3)种方法维护的粒度较粗,如果某个模块(或函数)发生了错误,均需要实施较复杂的过程,尤其是第(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、建立一张存储飞行软件所有模块(或函数)入口地址的映射表,软件运行按照映射表中的地址进行调用。假定软件由funcl、fimc2、func3三个函数和主函数组成,可以按下面的例子实现
权利要求
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. 3)生成的可执行代码按照步骤(1.4)制定的内存修改遥控指令格式生成遥控指令;(3. 2)在步骤(1.3)获得的地址映射表中查找需要被修改的模块或函数的入口地址映射的位置,按照步骤(1.4)制定的内存修改指令格式生成遥控指令,将被修改的模块或函数的入口地址映射的位置中的内容改为修改后的模块或函数的入口地址;(3. 3)将步骤(3. 1)生成的遥控指令发送至航天器,发送完毕并确认后,将步骤(3. 2) 生成的遥控指令发送至航天器,完成软件模块或函数的修改。
2.根据权利要求1所述的一种航天器嵌入式软件模块维护方法,其特征在于当维护需要在软件中增加新功能时,需要在步骤(1)中任何位置增加一个步骤,即设计航天器飞行软件时留有空任务或空线程;将新增功能的软件代码编译将可执行代码发送至航天器存储区,将空任务(或线程)的入口地址更改为新增功能的可执行代码的入口地址。
3.根据权利要求1所述的一种航天器嵌入式软件模块维护方法,其特征在于当维护需要在软件中删除新功能时,需要在步骤(1)中任何位置增加一个步骤,即设计航天器飞行软件时设计一个空模块或空函数,将被删除功能模块或函数的入口地址指向该空函数。
全文摘要
一种航天器嵌入式软件模块维护方法,(1)设计实现航天器飞行软件;(2)设计、实现被修改的模块或函数,(3)完成嵌入式软件模块或函数的维护,具体通过建立一张存储飞行软件所有模块(或函数)的入口地址映射表,软件固化时此地址表为默认状态。以后对模块(或函数)修改时,将修改后模块(或函数)的执行代码存储入内存空间,同时修改地址映射表,将修改前的模块(或函数)指向改变为修改后模块(或函数)的入口,即可实现调用关系的变化,达到任意模块(或函数)修改或维护的目的。
文档编号G06F9/44GK102508657SQ201110316979
公开日2012年6月20日 申请日期2011年10月18日 优先权日2011年10月18日
发明者唐自新, 李林, 翟君武, 陶利民 申请人:北京空间飞行器总体设计部
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1