一种ARM芯片程序在线重构的方法技术

技术编号:23512479 阅读:39 留言:0更新日期:2020-03-17 23:54
本发明专利技术提供了一种ARM芯片程序在线重构的方法,解决现有技术在芯片功能重构过程中用户不能操作芯片,且需要由用户设计把控系统工作状态和环境的问题。该ARM芯片程序在线重构的方法是将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在地址映射数据池中记录所述重构代码的函数首地址和变量地址;重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址,从而程序运行下一个主循环周期执行各个函数时,自动执行重构代码。

A method of on-line reconstruction of ARM chip program

【技术实现步骤摘要】
一种ARM芯片程序在线重构的方法
本申请涉及一种ARM芯片程序重构方法。
技术介绍
目前,ARM芯片程序重构,首先需要将重构程序作为数据发送给ARM,由ARM将此数据写入自身的程序存储器,重构完成重启ARM再使用重构后的程序,这种方式ARM芯片在重构过程和重启时会暂时失去原设计功能,重启ARM后恢复。这意味着芯片重构过程中,系统的功能会中断一段时间,原有功能被屏蔽,这时出于重构稳定性的考虑,这时需要用户介入对系统的把控,接手原ARM芯片的功能或停用整个系统。
技术实现思路
本申请的目的是解决现有技术在芯片功能重构过程中用户不能操作芯片,且需要由用户设计把控系统工作状态和环境的问题。为了实现以上目的,本申请提出以下解决方案:一种ARM芯片程序在线重构的方法,其特殊之处在于:当前运行程序的地址映射数据池(也可称为函数地址映射表)保存在程序存储器中,所述地址映射数据池记录有当前运行程序的各函数首地址和变量地址,重构代码用于更新其中至少一个函数;该ARM芯片程序在线重构的方法包括以下步骤:将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址,从而程序运行下一个主循环周期执行各个函数时,自动执行重构代码。上述约定位置可以是程序存储器的空白存储区域;也可以是程序存储器中的无用代码存储区域,写入的重构代码覆盖所述无用代码。相应的,本申请还提供一种程序上注装置,包括以下指令(控制程序)模块:代码写入模块,用于将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;地址更新模块,用于在重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址。相应的,本申请还提供一种动态程序存储器,除了存储有当前运行程序,该动态程序存储器还包括:a)当前运行程序的地址映射数据池,所述地址映射数据池记录有当前运行程序的各函数首地址和变量地址;b)空闲存储空间,用于写入重构代码,以更新当前运行程序中的至少一个函数;c)能够响应程序上注装置指令的接口代码,用于接收并执行程序上注装置发出的指令,以实现以下配置:将重构代码作为传输数据写入所述空闲存储空间,该空闲存储空间区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;在重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址。本申请提供了一种可以在芯片正常运行情况下通过外部注入程序数据动态重构芯片功能的方法,ARM重构过程不会停止系统功能,相比之前芯片程序重构后需要重新复位或加电的方式提供更优的用户体验。附图说明图1为本申请的系统构成示意图。图2为本申请实现在线重构的流程图。具体实施方式下面结合附图和实施例对本申请做详细描述。如图1所示,本申请的系统组成主要有程序上注装置和芯片程序存储器。芯片程序存储器中存储有当前运行程序,还建立了当前运行程序的地址映射数据池,该地址映射数据池记录有当前运行程序的各函数首地址和变量地址。另外,还具有空闲存储区域,用于写入重构代码。空闲存储区域可以是空白存储区域,也可以是无用代码存储区域(可被重构代码覆盖)。重构代码用于更新当前运行程序中至少一个函数。如图2所示,本申请进行ARM芯片程序在线重构的方法的过程主要包括:在当前程序运行的同时,将重构代码作为传输数据写入程序存储器中的约定位置(属于空闲存储区域),该约定位置区别于当前运行程序的存储地址;在地址映射数据池中记录所述重构代码的函数首地址和变量地址;重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址;程序运行下一个主循环周期执行各个函数时,将会根据函数首地址自动加载重构代码。当前运行程序通常有多个函数,按照特定的顺序自动执行主循环和函数内的跳转。例如,当前运行程序依次执行函数A、B、C、D、E、F完成一个主循环。各个函数都是逻辑自洽的,并引导执行下一个函数。重构代码是以函数为单元相对独立的,在空闲存储区域的存储位置可以连续,也可以不连续,因为最终是通过记录的重构代码的函数首地址来实现读取跳转的。例如:如果只需要更新当前运行程序中的函数C,则采用新的函数C’替换函数C,并在地址映射数据池中记录函数C’的函数首地址和变量地址;当前运行程序中的其他函数保持不变;函数C’代码写入完成后,将函数C的函数首地址更改为函数C’的函数首地址。如此,在程序运行下一个主循环周期执行完函数B后,CPU的PC指针将顺序跳转执行函数C’,然后再依次执行D、E、F完成一个主循环。如果需要更新当前运行程序中的函数C、F,则采用新的函数C’替换函数C,采用新的函数F’替换函数F,并在地址映射数据池中记录函数C’、F’的函数首地址和变量地址;当前运行程序中的其他函数保持不变。函数C’、F’代码写入完成后,将函数C、F的函数首地址分别更改为函数C’、F’的函数首地址。如此,在程序运行下一个主循环周期执行完函数B后,自动跳转执行函数C’,然后再依次执行D、E;执行完函数E后,自动跳转执行函数F’,完成一个主循环。示例:用户将新代码写入空白区域,将BIN文件中,A函数结尾处机器码0xEA(b相对跳转指令)或0xEB(bl相对跳转指令)或ldr绝对跳转指令后的地址数据改为新增代码的起始地址,新增代码中对应的机器码0xEA(b相对跳转指令)或0xEB(bl相对跳转指令)或ldr绝对跳转指令后的地址改为原程序中对应的调用地址即可。可见,本申请给出的ARM芯片程序动态重构方案,能够避免重构过程中原设计功能中断,实现了原功能和重构后功能无缝切换。本文档来自技高网...

【技术保护点】
1.一种ARM芯片程序在线重构的方法,其特征在于,当前运行程序的地址映射数据池保存在程序存储器中,所述地址映射数据池记录有当前运行程序的各函数首地址和变量地址,重构代码用于更新其中至少一个函数;该ARM芯片程序在线重构的方法包括以下步骤:/n将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;/n重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址;/n程序运行下一个主循环周期执行各个函数时,自动执行重构代码。/n

【技术特征摘要】
1.一种ARM芯片程序在线重构的方法,其特征在于,当前运行程序的地址映射数据池保存在程序存储器中,所述地址映射数据池记录有当前运行程序的各函数首地址和变量地址,重构代码用于更新其中至少一个函数;该ARM芯片程序在线重构的方法包括以下步骤:
将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;
重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址;
程序运行下一个主循环周期执行各个函数时,自动执行重构代码。


2.根据权利要求1所述的ARM芯片程序在线重构的方法,其特征在于:所述约定位置为程序存储器的空白存储区域;或者,所述约定位置为程序存储器中的无用代码存储区域,写入的重构代码覆盖所述无用代码。


3.一种程序上注装置,其特征在于,包括以下指令模块:
代码写入模块,...

【专利技术属性】
技术研发人员:杨卫平
申请(专利权)人:北京军懋国兴科技股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1