CN110888667A - 一种arm芯片程序在线重构的方法 - Google Patents
一种arm芯片程序在线重构的方法 Download PDFInfo
- Publication number
- CN110888667A CN110888667A CN201911045306.8A CN201911045306A CN110888667A CN 110888667 A CN110888667 A CN 110888667A CN 201911045306 A CN201911045306 A CN 201911045306A CN 110888667 A CN110888667 A CN 110888667A
- Authority
- CN
- China
- Prior art keywords
- address
- function
- program
- reconstruction
- code
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 230000006870 function Effects 0.000 claims abstract description 98
- 238000013507 mapping Methods 0.000 claims abstract description 19
- 230000005540 biological transmission Effects 0.000 claims abstract description 8
- 230000009191 jumping Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
Abstract
本发明提供了一种ARM芯片程序在线重构的方法,解决现有技术在芯片功能重构过程中用户不能操作芯片,且需要由用户设计把控系统工作状态和环境的问题。该ARM芯片程序在线重构的方法是将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在地址映射数据池中记录所述重构代码的函数首地址和变量地址;重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址,从而程序运行下一个主循环周期执行各个函数时,自动执行重构代码。
Description
技术领域
本申请涉及一种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相对跳转指令)或0x EB(bl相对跳转指令)或ldr绝对跳转指令后的地址数据改为新增代码的起始地址,新增代码中对应的机器码0xEA(b相对跳转指令)或0x EB(bl相对跳转指令)或ldr绝对跳转指令后的地址改为原程序中对应的调用地址即可。
可见,本申请给出的ARM芯片程序动态重构方案,能够避免重构过程中原设计功能中断,实现了原功能和重构后功能无缝切换。
Claims (4)
1.一种ARM芯片程序在线重构的方法,其特征在于,当前运行程序的地址映射数据池保存在程序存储器中,所述地址映射数据池记录有当前运行程序的各函数首地址和变量地址,重构代码用于更新其中至少一个函数;该ARM芯片程序在线重构的方法包括以下步骤:
将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;
重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址;
程序运行下一个主循环周期执行各个函数时,自动执行重构代码。
2.根据权利要求1所述的ARM芯片程序在线重构的方法,其特征在于:所述约定位置为程序存储器的空白存储区域;或者,所述约定位置为程序存储器中的无用代码存储区域,写入的重构代码覆盖所述无用代码。
3.一种程序上注装置,其特征在于,包括以下指令模块:
代码写入模块,用于将重构代码作为传输数据写入程序存储器中的约定位置,该约定位置区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;
地址更新模块,用于在重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址。
4.一种动态程序存储器,存储有当前运行程序,其特征在于:还包括:
a)当前运行程序的地址映射数据池,所述地址映射数据池记录有当前运行程序的各函数首地址和变量地址;
b)空闲存储空间,用于写入重构代码,以更新当前运行程序中的至少一个函数;
c)能够响应程序上注装置指令的接口代码,用于接收并执行程序上注装置发出的指令,以实现以下配置:将重构代码作为传输数据写入所述空闲存储空间,该空闲存储空间区别于当前运行程序的存储地址;并在所述地址映射数据池中记录所述重构代码的函数首地址和变量地址;在重构代码写入完成后,将待更新函数的函数首地址更改为重构代码的函数首地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911045306.8A CN110888667A (zh) | 2019-10-30 | 2019-10-30 | 一种arm芯片程序在线重构的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911045306.8A CN110888667A (zh) | 2019-10-30 | 2019-10-30 | 一种arm芯片程序在线重构的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110888667A true CN110888667A (zh) | 2020-03-17 |
Family
ID=69746636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911045306.8A Pending CN110888667A (zh) | 2019-10-30 | 2019-10-30 | 一种arm芯片程序在线重构的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110888667A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101030148A (zh) * | 2007-03-09 | 2007-09-05 | 华为技术有限公司 | 实现重映射的方法、装置 |
CN101751273A (zh) * | 2008-12-15 | 2010-06-23 | 中国科学院声学研究所 | 用于嵌入式系统的安全引导装置及方法 |
CN101763273A (zh) * | 2008-12-26 | 2010-06-30 | 上海闻泰电子科技有限公司 | 一种在嵌入式系统的扩展存储器中动态装入代码的方法 |
CN102156661A (zh) * | 2010-02-11 | 2011-08-17 | 华为技术有限公司 | 在线补丁的激活方法、装置及系统 |
CN104536727A (zh) * | 2014-11-26 | 2015-04-22 | 上海新跃仪表厂 | 星敏感器软件在轨维护方法 |
US20180107592A1 (en) * | 2016-10-18 | 2018-04-19 | Toshiba Memory Corporation | Reconstruction of address mapping in a host of a storage system |
CN109710296A (zh) * | 2018-12-14 | 2019-05-03 | 上海航天控制技术研究所 | 一种空天飞机惯导嵌入式软件在线更新方法 |
CN110308920A (zh) * | 2019-05-31 | 2019-10-08 | 北京控制工程研究所 | 一种不影响正常运行的在轨修改星上产品软件的方法 |
-
2019
- 2019-10-30 CN CN201911045306.8A patent/CN110888667A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101030148A (zh) * | 2007-03-09 | 2007-09-05 | 华为技术有限公司 | 实现重映射的方法、装置 |
CN101751273A (zh) * | 2008-12-15 | 2010-06-23 | 中国科学院声学研究所 | 用于嵌入式系统的安全引导装置及方法 |
CN101763273A (zh) * | 2008-12-26 | 2010-06-30 | 上海闻泰电子科技有限公司 | 一种在嵌入式系统的扩展存储器中动态装入代码的方法 |
CN102156661A (zh) * | 2010-02-11 | 2011-08-17 | 华为技术有限公司 | 在线补丁的激活方法、装置及系统 |
CN104536727A (zh) * | 2014-11-26 | 2015-04-22 | 上海新跃仪表厂 | 星敏感器软件在轨维护方法 |
US20180107592A1 (en) * | 2016-10-18 | 2018-04-19 | Toshiba Memory Corporation | Reconstruction of address mapping in a host of a storage system |
CN109710296A (zh) * | 2018-12-14 | 2019-05-03 | 上海航天控制技术研究所 | 一种空天飞机惯导嵌入式软件在线更新方法 |
CN110308920A (zh) * | 2019-05-31 | 2019-10-08 | 北京控制工程研究所 | 一种不影响正常运行的在轨修改星上产品软件的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5054115B2 (ja) | 非対称型マルチプロセッサ装置上の診断動作の実行 | |
US7110837B2 (en) | Control system and method for on-line editing of user program | |
JP2008242944A (ja) | 統合メモリ管理装置及び方法 | |
CN104461859A (zh) | 一种支持nvm软断点调试的仿真器和方法 | |
CN107820605B (zh) | 用于动态低延迟优化的系统和方法 | |
CN103729166A (zh) | 程序的线程关系确定方法、设备及系统 | |
CN109189607B (zh) | 一种应用程序断点恢复的方法 | |
US6256714B1 (en) | Computer system with efficient memory usage for managing multiple application programs | |
CN100365594C (zh) | 信息处理控制系统 | |
CN104866388A (zh) | 数据处理方法及装置 | |
CN113741944A (zh) | 一种具备升级功能的机器程序系统及升级方法与应用 | |
CN110888667A (zh) | 一种arm芯片程序在线重构的方法 | |
CN112596918A (zh) | 系统内各程序间共享变量的方法及存储装置 | |
US9223697B2 (en) | Computer reprogramming method, data storage medium and motor vehicle computer | |
US20100185809A1 (en) | Control System and Control Method of Virtual Memory | |
JP4684848B2 (ja) | 制御装置、そのプログラムおよび記録媒体 | |
CN105871571A (zh) | 一种传感器网络管理方法及系统 | |
CN103309733A (zh) | 任务调度信息持久化装置和任务调度信息持久化方法 | |
CN114528141A (zh) | 一种嵌入式系统内核态下程序缺陷修复的方法和装置 | |
KR102434126B1 (ko) | Plc 프로그램 처리 장치 | |
JP2013235317A (ja) | 仮想計算機システム | |
CN108008981B (zh) | 一种片上系统SoC中进行程序初始化的方法和装置 | |
CN106897051B (zh) | 一种进程清理的方法及装置 | |
CN105045647B (zh) | 一种支持nvm快速页编程的仿真器 | |
CN109932997A (zh) | 一种可编程逻辑控制器内核系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |