CN107391085A - 一种rom代码补丁运行方法和*** - Google Patents
一种rom代码补丁运行方法和*** Download PDFInfo
- Publication number
- CN107391085A CN107391085A CN201710469792.0A CN201710469792A CN107391085A CN 107391085 A CN107391085 A CN 107391085A CN 201710469792 A CN201710469792 A CN 201710469792A CN 107391085 A CN107391085 A CN 107391085A
- Authority
- CN
- China
- Prior art keywords
- code
- patch
- function pointer
- rom
- interface
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
- G06F9/26—Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
- G06F9/262—Arrangements for next microinstruction selection
- G06F9/268—Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种ROM代码补丁运行方法和***,适用于C语言环境,包括:为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;从非易失性存储器读取补丁代码并将其存储于RAM;根据接口的函数指针选择读取原始代码或补丁代码并运行。该***用于执行对应方法。本发明通过为存储于ROM的原始代码的函数预设函数指针型接口,当运行函数时,会根据函数指针的变量选择对应位置的原始代码或者补丁代码运行,能够在ROM环境下有效的导入补丁代码并使用。
Description
技术领域
本发明涉及一种ROM代码补丁运行方法和***,属于计算机领域。
背景技术
汇编语言,一种软件开发用的低级语言,用它编写出来的程序代码运行效率高,但存在可读性差等缺点,不适合开发大型软件工程;C语言,一种软件开发用的高级语言,用它编写出来的程序代码运行效率较高,可读性好,适合开发大型软件工程。
消费类电子产品更新换代快,并且消费者要求成本尽可能的低,产品面市速度快。而消费类电子产品所使用的专用智能控制芯片研发周期长,流片费用昂贵。智能控制芯片内部的微控制器运行着庞大的客户定制程序,为了控制成本,这些程序会被固化到廉价的ROM中。为了能够满足不断变化的市场需求,厂商会不断修改控制器的运行代码,代码更新后如果选择重新流片,则需要支付较高的费用而且等待较长的时间,这就造成了严重供需矛盾。
虽然ROM中的内容无法修改,但可以绕开ROM中的部分代码而执行RAM中的代码来实现功能的修改。这种做法在使用汇编语言的开发环境下实现起来比较方便,直接使用跳转指令即可,但在C语言的环境下无法使用跳转指令,从而很少被使用。
发明内容
为了解决上述问题,本发明通过提供一种ROM代码补丁运行方法和***。
本发明采用的技术方案一方面为一种ROM代码补丁运行方法,适用于C语言环境,包括:为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;从非易失性存储器读取补丁代码并将其存储于RAM;根据接口的函数指针选择读取原始代码或补丁代码并运行。
优选地,检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
优选地,所述配置信息包括函数指针列表、待修改接口的数量和编号。
优选地,基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
优选地,函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
本发明采用的技术方案另一方面为一种ROM代码补丁运行***,用于实现上述方法,包括:编译器,用于为原始代码内的函数设置基于函数指针的接口;微处理器,用于从非易失性存储器读取补丁代码并将其存储于RAM,根据接口的函数指针选择读取原始代码或补丁代码并运行;ROM,用于存储原始代码;RAM,用于存储从非易失性存储器获取的补丁代码。
优选地,所述微处理器还用于检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
优选地,所述配置信息包括函数指针列表、待修改接口的数量和编号。
优选地,所述微处理器还用于基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
优选地,函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
本发明的有益效果为通过为存储于ROM的原始代码的函数预设函数指针型接口,当运行函数时,会根据函数指针的变量选择对应位置的原始代码或者补丁代码运行,能够在ROM环境下有效的导入补丁代码并使用。
附图说明
图1所示为基于本发明实施例的一种ROM代码补丁运行方法示意图。
具体实施方式
以下结合实施例对本发明进行说明。
基于发明的实施例1,如图1所示一种ROM代码补丁运行方法,适用于C语言环境,包括:为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;从非易失性存储器读取补丁代码并将其存储于RAM;根据接口的函数指针选择读取原始代码或补丁代码并运行。
在编写ROM代码的时候,先为可能需要更改的各个C语言函数预留一些接口,这些接口采用函数指针的形式,处理器在处理代码的时序上,需要优先处理函数指针,然后根据函数指针读取对应代码(本实施例中,包括ROM的原始代码和RAM的补丁代码);处理器在上电时,RAM中的数据是不确定的,因此补丁代码必须先存放在其它位置,然后通过初始化代码复制到RAM中来才能正确执行;由于补丁代码相对整个工程来说体积很小,选择容量适合的非易失性存储器(比如EEPROM)来存储它,从整体成本上来考虑依然是非常廉价的;处理器在读取ROM代码中带有接口的函数时,会先判断对应的函数指针,根据函数指针的值(空值或者非空)决定是要选择位于ROM的原始代码还是位于RAM的补丁代码来运行。
基于发明的实施例1所述的方法,检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
所述配置信息包括函数指针列表、待修改接口的数量和编号。
处理器按照接口时序检测是否有ACK应答信号反馈。如果有,则说明已经安装了非易失性存储器,然后从中读取配置信息并进行校验标记核查(例如校验信息合法性,更新版本信息等资料),再读取需要修改的接口数量以及接口编号,再将各个编号对应的函数指针进行修改,最后将补丁代码复制到RAM中,各个函数指针指向对应补丁代码。
基于发明的实施例1所述的方法,基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
函数指针列表记录了所有预设接口的函数指针,而待修改接口是其中的一部分(可能在一次补丁中,只有一部分原始代码需要选择补丁代码来替换运行),改变函数指针的值(由空值改为非空值),而处理器则运行函数指针指向的代码。
函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
基于发明的实施例2,补丁代码和原始代码的烧录方法。
在编写ROM代码的时候,先为可能需要更改的各个C语言函数预留接口,这些接口采用函数指针的形式。
C语言源码如下:
通过设置编译器,将Rom.c文件编译到ROM所在的物理地址,将Ram.c文件编译到RAM所在的物理地址,从而得到两段机器码。
不需要修改原始功能的时候,我们在初始化代码中将函数指针ExtPtrVoidFunc[1]设置成NULL(空),Rom_Func1函数将执行ROM内的代码做加法运算。如果将函数指针ExtPtrVoidFunc[1]设置成Ram_Func1,则本模块将执行RAM中的代码做减法运算。从而实现了功能的改变。
编译器完成对代码的编译后,生成ROM代码和RAM补丁代码,制作一个工具将补丁代码中各个函数的指针提取出来,然后根据补丁函数的个数和接口编号,将补丁代码做成一个完整的烧录文件写入非易失性存储器。
基于发明的实施例3,一种ROM代码补丁运行***,用于实现上述方法,包括:编译器,用于为原始代码内的函数设置基于函数指针的接口;微处理器,用于从非易失性存储器读取补丁代码并将其存储于RAM,根据接口的函数指针选择读取原始代码或补丁代码并运行;ROM,用于存储原始代码;RAM,用于存储从非易失性存储器获取的补丁代码。
所述微处理器还用于检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
所述配置信息包括函数指针列表、待修改接口的数量和编号。
所述微处理器还用于基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。
Claims (10)
1.一种ROM代码补丁运行方法,适用于C语言环境,其特征在于,包括:
为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;
从非易失性存储器读取补丁代码并将其存储于RAM;
根据接口的函数指针选择读取原始代码或补丁代码并运行。
2.根据权利要求1所述的一种ROM代码补丁运行方法,其特征在于,检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
3.根据权利要求2所述的一种ROM代码补丁运行方法,其特征在于,所述配置信息包括函数指针列表、待修改接口的数量和编号。
4.根据权利要求2所述的一种ROM代码补丁运行方法,其特征在于,基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
5.根据权利要求1所述的一种ROM代码补丁运行方法,其特征在于,函数指针为空值时,选择读取原始代码并运行;
函数指针为非空值时,选择读取补丁代码并运行。
6.一种ROM代码补丁运行***,用于实现权利要求1所述方法,其特征在于,包括:
编译器,用于为原始代码内的函数设置基于函数指针的接口;
微处理器,用于从非易失性存储器读取补丁代码并将其存储于RAM,根据接口的函数指针选择读取原始代码或补丁代码并运行;
ROM,用于存储原始代码;
RAM,用于存储从非易失性存储器获取的补丁代码。
7.根据权利要求6所述的一种ROM代码补丁运行***,其特征在于,所述微处理器还用于检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
8.根据权利要求7所述的一种ROM代码补丁运行***,其特征在于,所述配置信息包括函数指针列表、待修改接口的数量和编号。
9.根据权利要求7所述的一种ROM代码补丁运行***,其特征在于,所述微处理器还用于基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
10.根据权利要求6所述的一种ROM代码补丁运行***,其特征在于,函数指针为空值时,选择读取原始代码并运行;
函数指针为非空值时,选择读取补丁代码并运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710469792.0A CN107391085A (zh) | 2017-06-20 | 2017-06-20 | 一种rom代码补丁运行方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710469792.0A CN107391085A (zh) | 2017-06-20 | 2017-06-20 | 一种rom代码补丁运行方法和*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107391085A true CN107391085A (zh) | 2017-11-24 |
Family
ID=60333444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710469792.0A Pending CN107391085A (zh) | 2017-06-20 | 2017-06-20 | 一种rom代码补丁运行方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107391085A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110187920A (zh) * | 2019-04-01 | 2019-08-30 | 深圳市德名利电子有限公司 | 基于otp的主控芯片的boot代码扩展方法 |
CN110308953A (zh) * | 2019-04-01 | 2019-10-08 | 深圳市德名利电子有限公司 | 基于32位mcu主控的rom代码函数修改方法 |
CN111814209A (zh) * | 2019-04-12 | 2020-10-23 | 恩智浦有限公司 | 用于将补丁应用于可执行代码的***和方法 |
CN112231136A (zh) * | 2020-11-04 | 2021-01-15 | 炬芯科技股份有限公司 | SoC芯片、获取修复信息的方法、存储介质及电子设备 |
CN114730245A (zh) * | 2019-09-11 | 2022-07-08 | 红松信号公司 | 用于降低处理器中的功耗的闪存和ram分配的***和方法 |
CN117743011A (zh) * | 2023-12-20 | 2024-03-22 | 无锡众星微***技术有限公司 | 一种RomCode运行错误修复方法和装置 |
WO2024108339A1 (zh) * | 2022-11-21 | 2024-05-30 | 河南许继仪表有限公司 | 一种消息注册订阅的方法及*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009156790A1 (en) * | 2008-06-23 | 2009-12-30 | Freescale Semiconductor, Inc. | Patching of a read-only memory |
CN102063634A (zh) * | 2010-12-24 | 2011-05-18 | 北京握奇数据***有限公司 | 一种掩膜智能卡的功能扩展方法及智能卡 |
CN102479265A (zh) * | 2010-11-25 | 2012-05-30 | 上海华虹集成电路有限责任公司 | 修改硬掩膜产品固件错误功能的方法 |
CN103632185A (zh) * | 2012-08-21 | 2014-03-12 | 北京同方微电子有限公司 | 一种具有扩展功能的掩膜智能卡 |
CN104424008A (zh) * | 2013-08-30 | 2015-03-18 | 飞思卡尔半导体公司 | 安全引导 rom 补丁的***及方法 |
CN106021089A (zh) * | 2015-10-30 | 2016-10-12 | 北京中电华大电子设计有限责任公司 | 一种补丁接口的测试方法及装置 |
-
2017
- 2017-06-20 CN CN201710469792.0A patent/CN107391085A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009156790A1 (en) * | 2008-06-23 | 2009-12-30 | Freescale Semiconductor, Inc. | Patching of a read-only memory |
CN102479265A (zh) * | 2010-11-25 | 2012-05-30 | 上海华虹集成电路有限责任公司 | 修改硬掩膜产品固件错误功能的方法 |
CN102063634A (zh) * | 2010-12-24 | 2011-05-18 | 北京握奇数据***有限公司 | 一种掩膜智能卡的功能扩展方法及智能卡 |
CN103632185A (zh) * | 2012-08-21 | 2014-03-12 | 北京同方微电子有限公司 | 一种具有扩展功能的掩膜智能卡 |
CN104424008A (zh) * | 2013-08-30 | 2015-03-18 | 飞思卡尔半导体公司 | 安全引导 rom 补丁的***及方法 |
CN106021089A (zh) * | 2015-10-30 | 2016-10-12 | 北京中电华大电子设计有限责任公司 | 一种补丁接口的测试方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110187920A (zh) * | 2019-04-01 | 2019-08-30 | 深圳市德名利电子有限公司 | 基于otp的主控芯片的boot代码扩展方法 |
CN110308953A (zh) * | 2019-04-01 | 2019-10-08 | 深圳市德名利电子有限公司 | 基于32位mcu主控的rom代码函数修改方法 |
CN111814209A (zh) * | 2019-04-12 | 2020-10-23 | 恩智浦有限公司 | 用于将补丁应用于可执行代码的***和方法 |
CN114730245A (zh) * | 2019-09-11 | 2022-07-08 | 红松信号公司 | 用于降低处理器中的功耗的闪存和ram分配的***和方法 |
CN114730245B (zh) * | 2019-09-11 | 2023-05-09 | 红松信号公司 | 用于降低处理器中的功耗的闪存和ram分配的***和方法 |
CN112231136A (zh) * | 2020-11-04 | 2021-01-15 | 炬芯科技股份有限公司 | SoC芯片、获取修复信息的方法、存储介质及电子设备 |
WO2024108339A1 (zh) * | 2022-11-21 | 2024-05-30 | 河南许继仪表有限公司 | 一种消息注册订阅的方法及*** |
CN117743011A (zh) * | 2023-12-20 | 2024-03-22 | 无锡众星微***技术有限公司 | 一种RomCode运行错误修复方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391085A (zh) | 一种rom代码补丁运行方法和*** | |
CN101814318B (zh) | 多层存储单元与非型闪存储存***及其控制器与存取方法 | |
CN102629237B (zh) | 非易失性半导体存储器及搜索最后写入地址的方法 | |
CN107506219A (zh) | 一种基于Android***的通用版本升级方法 | |
CN109840215A (zh) | 未对齐写入的处理 | |
CN109410998A (zh) | 存储器装置及其操作方法 | |
CN102623069B (zh) | 随机激励闪存模型验证方法 | |
CN113672515A (zh) | 一种基于符号执行的wasm智能合约漏洞检测方法 | |
JP6157637B2 (ja) | リードライトメモリデバイスのデータイメージ中の仮想境界コード | |
CN102306127B (zh) | 一种ddriii内存识别和初始化方法 | |
CN103902461A (zh) | 不同Nand闪存兼容方法及装置 | |
CN106776391A (zh) | 一种NAND Flash控制器的控制方法和装置 | |
EP2278501A2 (en) | Portable electronic device, smartcard and control method for portable electronic device | |
US9129137B2 (en) | Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine | |
CN103678115A (zh) | 在混合模式程序中检测源代码差错的位置的设备和方法 | |
CN109686391A (zh) | 非易失性存储器装置及其操作方法及非易失性存储器封装 | |
CN104915287A (zh) | 单元测试方法及*** | |
CN115098139A (zh) | 固件更新方法、***、下位机和存储介质 | |
CN107247587A (zh) | 一种网页模板生成方法及装置 | |
CN106775778A (zh) | 嵌入式程序开发中程序更新识别方法及*** | |
CN108197351A (zh) | 一种受单片机控制的集成电路的仿真验证方法 | |
CN103593252B (zh) | 具有动态错误侦测及更正的存储器 | |
CN108255510A (zh) | 一种基于iap在线升级待升级固件传输校验设计方法 | |
US20040181777A1 (en) | Method and device for programming electronic devices using a uniform parameter format | |
Kwon et al. | Low-power fast partial firmware update technique of on-chip flash memory for reliable embedded IoT microcontroller |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171124 |