首页> 中国专利> 一种软件修正性在轨维护优化方法

一种软件修正性在轨维护优化方法

摘要

一种软件修正性在轨维护优化方法,步骤为:(1)确定星上软件代码中需要实施在轨维护函数的最后一个修改点语句;(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址;(3)将所述新函数与原有星上软件代码进行联合编译;(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替换所述需要实施在轨维护函数。采用本发明方法实现了软件修正性在轨维护的优化设计,可明显减少程序的注入量,降低注入程序被单粒子打翻的风险。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-11

    授权

    授权

  • 2013-06-12

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20130130

    实质审查的生效

  • 2013-05-08

    公开

    公开

说明书

技术领域

本发明属于星载计算机软件在轨维护技术领域,涉及一种软件修正性在 轨维护优化方法。

背景技术

卫星固化于PROM中的程序不能满足任务需求,需要实施多次软件在轨 维护,以进行姿态与轨道控制。

卫星姿轨控分系统AOCC应用软件采用ANSI C语言开发,以往采用 ANSI C语言开发的星载软件实施在轨维护时,一般采用替换整个在轨维护 函数模块的方法。这种方法生成的目标注入代码规模比较大,不利于地面操 作;同时由于注入程序运行于SRAM中,规模越大,被单粒子打翻的风险越 高;另外SRAM中程序的运行时间与PROM中程序的运行时间存在差异, 影响软件运行时序。因此,如何减少软件在轨维护过程中程序注入的规模, 是一个亟待解决的问题。

发明内容

本发明解决的技术问题是:针对现有技术的不足,对于软件修正性在轨 维护,提供了一种优化方法,实现了软件修正性在轨维护过程中目标注入代 码规模的减少。

本发明的技术解决方案是:

一种软件修正性在轨维护优化方法,步骤如下:

(1)确定星上软件代码中需要实施在轨维护函数的最后一个修改点语 句;

(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和 修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实 施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址,之后进 入步骤(3);

(3)将所述新函数与原有星上软件代码进行联合编译,之后进入步骤 (4);

(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替 换所述需要实施在轨维护函数。

所述新函数是在所述需要实施在轨维护函数的基础上修改得到,在最后 一个修改点语句之后的需要实施在轨维护函数的程序代码与将要上注的替换 所述需要实施在轨维护函数的新函数在最后一个修改点语句之后的程序代码 完全相同。

本发明与现有技术相比具有如下优点:

本发明可在软件修正性在轨维护模块生成注入代码时,可明显减少程序 的注入量,降低注入程序被单粒子打翻的风险。

附图说明

图1为本发明流程图;

图2为在轨维护过程中窗口切换示意图。

具体实施方式

下面结合附图对本发明做进一步介绍。

本发明从减少修正性软件在轨维护生成目标注入代码的规模出发,采用 复用最后一个修改点语句s之后的程序代码的方法,实现目标注入代码生成 的同时,提高了PROM中固化程序代码的复用率,降低了目标注入代码的规 模,优化了软件修正性在轨维护设计。

修正性在轨维护:假设函数Origin需要实施在轨维护,维护后的函数为 New。New函数只在原函数Origin的基础上进行了修正性更改,与函数 Origin有公共代码,即New函数与Origin函数在某条程序语句s之后的程 序代码完全相同,此时的在轨维护称为修正性在轨维护。其中程序语句s称 为Origin函数的最后一个修改点语句。

如图1所示,本发明提供的一种软件修正性在轨维护优化方法步骤如下:

(1)确定星上软件代码中需要实施在轨维护函数(原函数Origin)的最 后一个修改点语句s;新函数(new)是在所述需要实施在轨维护函数的基础上 修改得到,在最后一个修改点语句s之后的需要实施在轨维护函数的程序代 码与将要上注的替换所述需要实施在轨维护函数的新函数在最后一个修改点 语句s之后的程序代码完全相同,即:比较维护后的New函数与原函数Origin 代码,假设New函数与Origin函数语句代码,从语句s开始至函数return 结束语句完全相同;而New函数与Origin函数语句s的前一条语句不同, 语句s即为Origin函数的最后一个修改点语句。

(2)在所述新函数的最后一个修改点语句之后,进行恢复寄存器现场和 修改所述新函数的返回地址的操作,将新函数的返回地址修改为所述需要实 施在轨维护函数在其最后一个修改点语句之后的下一条语句的地址,之后进 入步骤(3);

恢复寄存器现场:由于New函数可能改变Origin函数使用的寄存器值, 查看Origin函数对应的汇编语句,分析s语句执行之前的寄存器保留值,并 判断相应的寄存器值是否被New函数更新。对于New函数中更新的寄存器 数值,添加汇编赋值语句,恢复其保留值,并置于New函数最后一个修改点 语句之后;

修改在轨维护后函数New的返回地址:通过增加修改寄存器i7的指令, 将Origin函数语句s的下一条语句地址赋值给i7,假设Origin函数语句s 的下一条语句地址为0x00017ffC,由于返回指令会在i7基础上加8,修改i7 的地址应为0x00017ff4。这样函数结束后,即可跳转到Origin函数语句s 的下一条语句继续执行。

(3)将所述新函数与原有星上软件代码进行联合编译,之后进入步骤 (4);

(4)提取联合编译之后的所述新函数对应的代码并且上注到星上用于替 换所述需要实施在轨维护函数。

在轨维护模块与星载固化程序联合编译后,在轨维护的基本原理:基于 窗口切换的原则,每当函数中的SAVE(保存)执行时,当前函数的o寄存 器就变成被调用函数的i寄存器,当前函数的栈顶sp成为被调用函数的栈底 fp,SAVE切换窗口的同时,还执行了类似加法的指令操作(加一个负数), 只不过它的源寄存器来源于当前窗口的sp,目标寄存器位于窗口切换之后的 sp,堆栈的切换如图2所示,其中,CWP=N代表当前函数的窗口堆栈, CWP=N-1代表新函数的窗口堆栈。

如图2所示,基于上述在轨维护的基本原理,现有技术中通过如下方式 注入New函数来替换原函数Origin。这种情况下,需要删除New函数中的 SAVE语句,一方面,New函数不再开辟寄存器窗口,不重新分配堆栈空间, 与原函数Origin共用相同的寄存器窗口和堆栈;另一方面,New的返回语句 将导致寄存器窗口回退,进入New后,New的返回相当于原函数Origin的 返回,原函数Origin中的后续代码不再执行。因此,为保证原有软件的功能, 更动模块func0之后的所有内容,需要在注入代码New函数里重写。

对于修正性在轨维护,通常的做法是,将新增加的函数放到软件特定位 置参与编译,然后提取编译后的二进制代码,删除SAVE语句,并根据实际 注入地址,对其中的绝对地址跳转进行重新定位。在轨注入过程中,删除 SAVE操作的前提是,保证注入模块和维护所在模块堆栈使用上不存在任何 冲突。这样,注入的在轨维护程序除了更改部分内容,还需要将原函数所有 内容全部包含进来,导致在轨注入代码较多。

针对此问题,本发明采取如下改善措施:

首先,保留注入代码new函数的SAVE语句,保证New函数注入代码 开辟自己的窗口,在其返回时,也不对原函数Origin的窗口产生影响。

其次,增加New函数返回地址的修改,在函数返回语句之前,增加修 改寄存器i7的指令,将原函数Origin调用的下一条语句地址赋值给i7。假 设原函数Origin调用的下一条语句地址为0x00017ffC,由于返回指令会在 i7基础上加8,所以修改i7的地址应为0x00017ff4。

这样,代码编译后,提取对应的整个二进制代码,重新定位地址即可完 成注入代码的生成。这样,New函数执行完,将返回到原函数Origin继续后 续程序的执行,代码注入量将明显减少。

现有技术中,问题模块或语句之前的程序无法从注入代码中省略,必须 将修改点之前的代码全部包含进来。本发明不用在注入代码中重新编写修改 点之后的程序,可部分减少注入量。

在轨注入代码new函数不删除SAVE语句,重定位绝对地址后,在注 入代码返回前,修改i7地址为最后一个修改点对应的地址,即注入函数运行 完成后,返回到原函数继续原有操作。

本发明未详细说明部分属本领域技术人员公知常识。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号