CN116382701A - 用于嵌入式系统的程序生成方法及程序局部更新方法 - Google Patents
用于嵌入式系统的程序生成方法及程序局部更新方法 Download PDFInfo
- Publication number
- CN116382701A CN116382701A CN202310442565.4A CN202310442565A CN116382701A CN 116382701 A CN116382701 A CN 116382701A CN 202310442565 A CN202310442565 A CN 202310442565A CN 116382701 A CN116382701 A CN 116382701A
- Authority
- CN
- China
- Prior art keywords
- program
- file
- upgradeable
- updated
- fixed part
- 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 59
- 230000006870 function Effects 0.000 claims description 91
- 239000012634 fragment Substances 0.000 claims description 13
- 238000000605 extraction Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 3
- 238000004590 computer program Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000007711 solidification Methods 0.000 description 1
- 230000008023 solidification Effects 0.000 description 1
- 230000003068 static effect Effects 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/40—Transformation of program code
- G06F8/41—Compilation
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及一种用于嵌入式系统的程序生成方法及程序局部更新方法,通过将源代码文件分为可升级部分文件以及固定部分文件,并在可升级部分文件中,提取被固定部分文件调用的函数,并对提取得到的被调用函数名称前增加预设前缀,在对链接脚本文件进行编写时,将可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区,并对名称前具有预设前缀的被调用函数分配固定存储地址,最后根据可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到嵌入式系统可执行的二进制目标程序,该二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。基于本方法生成的程序可进行局部更新升级。
Description
技术领域
本申请涉及嵌入式系统技术领域,特别是涉及一种用于嵌入式系统的程序生成方法及程序局部更新方法。
背景技术
嵌入式终端设备是一种广泛用于工业现场、安防、消费、电力系统等领域的小型智能设备,主要由硬件和软件组成。从软件角度看可以将其分为两类:带操作系统和不带操作系统。对于那些带操作系统的如:VxWorks、Linux、Wince等其应用升级比较方便,而且大部分系统已经自带了丰富的升级功能。对于那些不带操作系统的嵌入式终端设主要由成本比较低、功耗体积小的CPU和特定功能的专用软件组成,其主要特点是硬件资源(内存、Flash)有限,功能比较简单,其应用软件的升级实现比较困难。随着应用场景的多样化,作为带软件的智能终端,应用功能升级成为越来越多的嵌入式设备必须具备的功能项。
目前在这类单一程序的嵌入式设备中比较常见的软件升级方法是单独再开发一个独立的升级程序,当需要升级时启动升级程序将应用程序完整的分段下载、烧录到设备,从而达到升级的目的。这种升级的特点是每次都要将一个完整的应用程序进行远程下载、烧录,这对流量、可靠性提出了挑战。针对这一弊端,有人提出了将应用程序分割成多个独立的小应用程序进行分段跳转运行、升级;也有人用增量方式进行远程升级。这些方法或多或少存在一些问题,分成多个独立的小应用程序这种方式增加了系统的复杂度,每个小应用程序都是一个完整的程序,每一程序在运行时之前都需要进行环境(堆栈初始化、全局变量初始化等)增加了系统运行时间、同时也增加了总的存储空间;对于增量式升级虽然可以减少传输通信流量,烧写程序没有减少。
现实中的升级需求大多数只需要对应用程序局部功能进行修改、增强,针对这类需求完全没有必要将整个程序进行升级,只需要对部分程序进行更新即可,对于非操作系统的单应用程序进行局部功能模块升级是本方法要解决的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够对嵌入式系统中的程序进行局部更新的用于嵌入式系统的程序生成方法及程序局部更新方法。
一种用于嵌入式系统的程序生成方法,所述方法包括:
获取目标程序对应功能业务的源代码文件;
根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
在其中一实施例中,所述预设的划分方案中包括:
将硬件驱动功能、Flash烧写功能、硬件中断向量表以及通信协议话划分为不需要升级的固定部分;
将程序逻辑处理功能以及参数划分为需要升级的可升级部分。
在其中一实施例中,所述可升级部分文件中不包括需要被所述固定部分文件调用的全局变量。
在其中一实施例中,在对名称前具有预设前缀的被调用函数分配固定存储地址之后,还在该被调用函数前添加额外的编译代码,使得在进行编译时,将所述被调用函数存储在分配的固定存储地址指向的区域。
在其中一实施例中,所述存储区域为嵌入式系统的Flash存储模块。
一种用于嵌入式系统的程序生成装置,所述装置包括:
源代码文件获取模块,用于获取目标程序对应功能业务的源代码文件;
固定/可升级部分划分模块,用于根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
被调用函数提取模块,用于在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
存储区域分配模块,用于根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
目标程序编译模块,用于根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取目标程序对应功能业务的源代码文件;
根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取目标程序对应功能业务的源代码文件;
根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
一种用于嵌入式系统的程序局部更新方法,所述程序更新方法应用于根据上述的程序生成方法生成的目标程序,所述程序局部更新方法包括:
获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
在其中一实施例中,所述在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件包括:
将所述更新后的二进制目标程序转化为bin文件格式;
在所述bin文件格式中从开头跳过第一片区长度处开始读取数据直到结束,读取得到的数据即为提取得到的所述更新后可升级部分程序文件。
一种用于嵌入式系统的程序局部更新装置,所述装置包括:
修改模块,用于获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
更新编译模块,用于根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
提取模块,用于在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
局部更新模块,用于将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
上述用于嵌入式系统的程序生成方法及程序局部更新方法,通过根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件,在可升级部分文件中,提取其需要被固定部分文件中内容调用的函数,并对提取得到的被调用函数名称前增加预设前缀,在对链接脚本文件进行编写时,将可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区,并对名称前具有预设前缀的被调用函数分配固定存储地址,最后根据可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到嵌入式系统可执行的二进制目标程序,该二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。基于本方法生成的用于嵌入式系统的程序可进行局部更新升级。
附图说明
图1为一个实施例中用于嵌入式系统的程序生成方法的流程示意图;
图2为一个实施例中可局部更新的应用程序的结构示意图;
图3为一个实施例中应用程序的调用的关系意图;
图4为一个实施例中程序存储空间的示意图;
图5为一个实施例中用于嵌入式系统的程序局部更新方法的流程示意图;
图6为一个实施例中用于嵌入式系统的程序生成装置的结构框图;
图7为一个实施例中实现程序生成方法的计算机设备的内部结构图;
图8为一个实施例中用于嵌入式系统的程序局部更新装置的结构框图;
图9为一个实施例中实现程序局部更新方法的计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
针对现有技术中,嵌入式系统中非操作程序进行升级时,实际上只需要对程序中局部功能进行修改或增强,如图1所示,提供了一种用于嵌入式系统的程序生成方法,基于该方法生成的程序可进行局部更新,包括以下步骤:
步骤S100,获取目标程序对应功能业务的源代码文件;
步骤S110,根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
步骤S130,在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
步骤S140,根据预设的存储方案对链接脚本文件进行编写,存储方案包括将可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的调用函数分配固定存储地址;
步骤S150,根据可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到嵌入式系统可执行的二进制目标程序,该二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
在本方法中,通过采用连接描述文件也就是链接脚本文件对应用程序的可升级部分和固定部分进行分段存储,同时,对可升级部分中需要被固定部分调用的入口函数进行地址固化。这样在对该应用程序进行修改升级时,固定部分的程序由于源代码没有进行修改,其所生成的程序固定部分对应的二进制内容就不会发生变化,其所提供的函数调用地址也不会发现变化。而可升级部分程序由于源代码更新编译后生成的程序二进制内容已经发生了变化,由于其被固定部分程序调用的函数地址是固定的,所以在进行功能升级后,固定部分的程序仍然能够进行功能调用执行,而这两个部分(也就是固定部分以及可升级部分)程序仍然是一个完整的程序,使用的是同一个硬件驱动、中断、堆栈空间。
具体的,首先根据嵌入系统所要具备的功能对程序源代码进行编写,并在步骤S110中,根据预设的划分方案将源代码文件进行划分。在这里,通过划分方案确定程序需要升级的功能部分,以及不需要升级的功能部分。
在本实施例中,一般将硬件驱动功能、Flash烧写功能、硬件中断向量表以及通信协议话划分为不需要升级的固定部分,将程序逻辑处理功能以及参数划分为需要升级的可升级部分,如图1所示,将一个完成的程序分为了两个部分。
进一步的,在对源代码文件进行划分时,需要注意,可升级部分文件中不包括需要被固定部分文件调用的全局变量。也就是说,在进行划分时,将全局变量的定义放入固定部分。
接着,在步骤S120中,对固定函数中需要调用到可升级部分内容的调用函数提取出来,并对这些调用函数进行特别命名,在本实施例中,在函数名称前增加api_前缀以表示区分。对这些以api_为前缀的函数固定存储地址,此步骤很关键,它是保证升级部分功能变更后仍然可以被固定部分程序调用的关键。
在这里需要注意的是,为了使这些以api_为前缀的函数大小固定不变,仅仅起到跳转调用作用,这些函数内部调用其他功能需要尽量少,最好只调用一个本部分实现的其他函数。
在步骤S130中,实际上,链接脚本文件是将其他多个单独文件链接起来成为一个可执行程序的规则文件,在进行链接脚本进行编写时,将存储部分划分为第一片区以及第二片区,并将固定部分文件以及可升级部分文件的存储地址分别写为第一片区以及第二片区。
在本实施例中,由于本方法是生成嵌入式系统应用的应用程序,所说义上述的存储区域可为flash存储模块。
在本实施例中,给出了一种链接脚本文件的主体结构与框架:
同时,在链接脚本文件中,还给api_为前缀的被调用函数分配固定存储地址,为了将这些api_函数在编译后存放到指定的存储区域,还需要源代码中为每个api函数添加额外的编译代码,用于在编译链接时告知编译器将函数放置到指定的位置。
在本实施例中,在每个api_为前缀的函数名称后面添加属性修饰符,如下所示:
api_fun1(…)__attribute__((section(“api_fun1”)))
api_fun2(…)__attribute__((section(“api_fun2”)))。
在进行额外的编译后,这些api_为前缀的函数不管程序源代码如何更新,程序编译后其存在的位置始终固定不变,这也就保证可升级部分程序更新后未升级的固定部分程序还能调用其功能,保证了程序的完整性。
接下来,对应用程序中的调用关系进行说明,并进一步的证明被分为两个部分的应用程序仍旧是一个完整的应用程序,保证了后续程序更新方法的可行性。
从调用关系角度看,这两部分(固定部分程序以及可)的调用可分为3类:内部调用(包括硬件中断跳转),升级部分程序对固定部分程序的调用,固定部分对升级程序部分的调用,如图3所示。
由于升级时升级的是可升级部分程序,升级前后内部调用完整性没有破坏,如图3中的虚线部分所示。升级前后,由于固定部分程序没有发生改变,因此升级部分对固定部分程序功能的调用地址没有改变,因此这种调用关系也没有破坏,如图3中的点线部分所示。固定部分对升级部分程序的调用由于经过上述处理后,调用的地址也不会发生改变,因此图中的实线部分调用关系也没有破坏。因此,经从调用关系角度分析应用程序升级后完整性没有破坏,程序还是一个完整的应用程序,保证了后续局部更新方法的可行性。
最后,在步骤S150中,根据可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到嵌入式系统可执行的二进制目标程序,该二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序,如图4所示。
如图5所示,本申请还提供了一种用于嵌入式系统的程序局部更新方法,该程序更新方法应用于根据上述的程序生成方法生成的目标程序,具体步骤包括:
步骤S200,获取更新文件,根据更新文件对目标程序的可升级部分文件进行修改;
步骤S210,根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
步骤S220,在更新后的二进制目标程序中,提取更新后可升级部分程序文件;
步骤S230,将更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
在本实施例中,对基于上述程序生成方法生成的非操作系统应用程序只有一个文件,要实现该应用程序部分功能升级需要从这个文件中提取可升级那段程序内容,因此需要制作一个程序提取工具,其功能首先判断文件长度,然后从固定偏移地址处提取后面所有内容重新生成一个新的文件,将这个新生成的文件进行远程下载、烧写至可升级部分程序在存储区域存储的第二片区域,即可完成程序的局部升级。
具体的,首先在需要进行更新应用程序对应的源代码文件中进行修改,实际上就是在划分后得到的可升级部分文件进行修改,再根据修改后的文件重新进行编译,其中固定部分文件以及链接脚本文件均不进行修改,得到更新后的二进制目标程序。此时,将更新后的二进制目标程序转化为bin文件格式,在bin文件格式中从开头跳过第一片区长度处开始读取数据直到结束,读取得到的数据即为提取得到的更新后可升级部分程序文件。最后将该更新后可升级部分程序文件通过串口、网络或4G等方式按协议传输给嵌入式设备,嵌入式设备端由固定程序部分中所实现的协议接收数据,然后将接收到的数据烧写到LR_FLASH2所定义的存储区域,完成后终端进行软件复位重启即可。
在本实施例中,上述用于嵌入式系统的程序生成方法及程序局部更新方法可应用于一般单片机、Arm等嵌入式CPU。
应该理解的是,虽然图1和图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1和图5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种用于嵌入式系统的程序生成装置,包括:源代码文件获取模块300、固定/可升级部分划分模块310、调用函数提取模块320、存储区域分配模块330和目标程序编译模块340,其中:
源代码文件获取模块300,用于获取目标程序对应功能业务的源代码文件;
固定/可升级部分划分模块310,用于根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
调用函数提取模块320,用于在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
存储区域分配模块330,用于根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
目标程序编译模块340,用于根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
关于用于嵌入式系统的程序生成装置的具体限定可以参见上文中对于用于嵌入式系统的程序生成方法的限定,在此不再赘述。上述用于嵌入式系统的程序生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储预设的划分方案以及预设的存储方案数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种用于嵌入式系统的程序生成方法。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取目标程序对应功能业务的源代码文件;
根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
在所述可升级部分文件中,提取被固定部分文件中调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取目标程序对应功能业务的源代码文件;
根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
在所述可升级部分文件中,提取被固定部分文件中内容进行调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
在一个实施例中,如图8所示,提供了一种用于嵌入式系统的程序局部更新装置,包括:修改模块400、更新编译模块410、提取模块420和局部更新模块430,其中:
修改模块400,用于获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
更新编译模块410,用于根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
提取模块420,用于在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
局部更新模块430,用于将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
关于用于嵌入式系统的程序局部更新装置的具体限定可以参见上文中对于用于嵌入式系统的程序局部更新方法的限定,在此不再赘述。上述用于嵌入式系统的程序局部更新装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种用于嵌入式系统的程序局部更新方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (7)
1.用于嵌入式系统的程序生成方法,其特征在于,所述方法包括:
获取目标程序对应功能业务的源代码文件;
根据预设的划分方案将需要升级的功能部分对应的源代码与不需要升级的功能部分对应的源代码进行划分,并分别得到可升级部分文件以及固定部分文件;
在所述可升级部分文件中,提取其中被所述固定部分内容调用的函数,并对提取得到的所述被调用函数名称前增加预设前缀;
根据预设的存储方案对链接脚本文件进行编写,所述存储方案包括将所述可升级部分文件以及固定部分文件分别存储至存储区域第一片区和第二片区中,并对名称前具有预设前缀的被调用函数分配固定存储地址;
根据所述可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到所述嵌入式系统可执行的二进制目标程序,所述二进制目标程序包括进行分段存储的固定部分程序以及可升级部分程序。
2.根据权利要求1所述的程序生成方法,其特征在于,所述预设的划分方案中包括:
将硬件驱动功能、Flash烧写功能、硬件中断向量表以及通信协议话划分为不需要升级的固定部分;
将程序逻辑处理功能以及参数划分为需要升级的可升级部分。
3.根据权利要求2所述的程序生成方法,其特征在于,所述可升级部分文件中不包括需要被所述固定部分文件调用的全局变量。
4.根据权利要求3所述的程序生成方法,其特征在于,在对名称前具有预设前缀的被调用函数分配固定存储地址之后,还在该被调用函数前添加额外的编译代码,使得在进行编译时,将所述被调用函数存储在分配的固定存储地址指向的区域。
5.根据权利要求4所述的程序生成方法,其特征在于,所述存储区域为嵌入式系统的Flash存储模块。
6.用于嵌入式系统的程序局部更新方法,其特征在于,所述程序更新方法应用于根据权利要求1-5任一项所述的程序生成方法生成的目标程序,所述程序局部更新方法包括:
获取更新文件,根据所述更新文件对目标程序的可升级部分文件进行修改;
根据修改后可升级部分文件、固定部分文件以及链接脚本文件进行编译,得到更新后的二进制目标程序;
在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件;
将所述更新后可升级部分程序文件烧录至存储区域的第二片区中,以完成目标程序的局部更新。
7.根据权利要求6所述的程序局部更新方法,其特征在于,所述在所述更新后的二进制目标程序中,提取更新后可升级部分程序文件包括:
将所述更新后的二进制目标程序转化为bin文件格式;
在所述bin文件格式中从开头跳过第一片区长度处开始读取数据直到结束,读取得到的数据即为提取得到的所述更新后可升级部分程序文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310442565.4A CN116382701A (zh) | 2023-04-23 | 2023-04-23 | 用于嵌入式系统的程序生成方法及程序局部更新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310442565.4A CN116382701A (zh) | 2023-04-23 | 2023-04-23 | 用于嵌入式系统的程序生成方法及程序局部更新方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116382701A true CN116382701A (zh) | 2023-07-04 |
Family
ID=86971006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310442565.4A Pending CN116382701A (zh) | 2023-04-23 | 2023-04-23 | 用于嵌入式系统的程序生成方法及程序局部更新方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116382701A (zh) |
-
2023
- 2023-04-23 CN CN202310442565.4A patent/CN116382701A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109933348B (zh) | 一种电子控制单元中Bootloader的更新方法和装置 | |
US6230316B1 (en) | Patching rebased and realigned executable files | |
CN111258587B (zh) | 一种安卓应用插件化的实现方法、装置、设备及存储介质 | |
CN110780897B (zh) | 一种代码变更方法以及装置 | |
CN107506219A (zh) | 一种基于Android系统的通用版本升级方法 | |
CN101026826B (zh) | 用于提供在无线装置中使用的整体映像的系统和方法 | |
CN103984582A (zh) | 一种热更新方法和装置 | |
CN112306540A (zh) | 一种多工程独立编译方法、系统、终端及介质 | |
CN101211265A (zh) | 一种终端嵌入式系统的软件更新方法和装置 | |
CN110673853A (zh) | 一种编译方法、装置及系统 | |
CN104699503A (zh) | 一种替换安卓系统中函数的执行逻辑的方法及装置 | |
CN101334737A (zh) | 一种嵌入式设备的启动或复位方法 | |
EP3698253A1 (en) | System and method for managing program memory on a storage device | |
CN115469894A (zh) | 一种应用程序的安装控制方法、装置、设备及存储介质 | |
CN116382701A (zh) | 用于嵌入式系统的程序生成方法及程序局部更新方法 | |
CN115373707A (zh) | 航天器实时系统内存受限条件下任务在线更新系统及方法 | |
CN108536444B (zh) | 插件编译方法、装置、计算机设备和存储介质 | |
US20040015943A1 (en) | Embedded computer system equipped with an upgradeable software library | |
KR100745256B1 (ko) | 임베디드 시스템에서의 코드 오버레이 방법 | |
CN112860287A (zh) | 系统程序升级方法、装置、计算机设备及存储介质 | |
KR100538627B1 (ko) | 무선통신단말기의 소프트웨어 부분 업그레이드 방법 | |
CN108008981B (zh) | 一种片上系统SoC中进行程序初始化的方法和装置 | |
CN115794260B (zh) | 一种简单的dsp软件库动态加载方法 | |
CN113672238B (zh) | 基于实时操作系统模块化管理的运行方法、装置及设备 | |
CN112015478B (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 |