CN115756551A - 软件升级方法、装置、电子设备和可读存储介质 - Google Patents
软件升级方法、装置、电子设备和可读存储介质 Download PDFInfo
- Publication number
- CN115756551A CN115756551A CN202211640477.7A CN202211640477A CN115756551A CN 115756551 A CN115756551 A CN 115756551A CN 202211640477 A CN202211640477 A CN 202211640477A CN 115756551 A CN115756551 A CN 115756551A
- Authority
- CN
- China
- Prior art keywords
- program
- application
- upgrade
- upgrading
- application program
- 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
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请实施例公开了软件升级方法、装置、电子设备和可读存储介质,该方法包括:在接收到升级命令之后,从应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;所述升级程序接收更新应用程序;所述升级程序将所述更新应用程序更新到所述设备中。通过本申请解决了现有技术中需要在flash中划分空间用作IAP升级程序存储区所导致的浪费flash资源的问题,从而减少了IAP升级对flash空间的占用,节约了flash资源。
Description
技术领域
本申请涉及到软件领域,具体而言,涉及软件升级方法、装置、电子设备和可读存储介质。
背景技术
目前,在很多设备中均使用了主控处理器或者处理单元,主控处理器或者处理单元使用了闪存(flash)来进行存储。flash是存储处理器或者处理单元的一种,通过特定的程序可以修改里面的数据。flash在电子领域内往往表示Flash Memory的意思,即平时所说的“闪存”,全名叫Flash EEPROM Memory。flash不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据,使数据不会因为断电而丢失。
对于带有主控处理器或者处理单元的设备来说,升级功能是一个不可或缺的功能,在升级的时候会使用IAP的方式进行升级。IAP是In Application Programming的缩写,对应中文为“在应用中编程”,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,其中,User Flash即用户能够使用的flash空间,与User Flash对应的是系统空间即System Flash,这部分空间用户是没有办法使用的。IAP的目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
在设备中flash资源是比较宝贵的。在主控处理器或者处理单元的flash资源占用中,为了支持IAP功能,很大一块flash空间又被用来做为IAP升级程序存储区,导致对flash的消耗比较大,浪费了资源。
发明内容
本申请实施例提供了软件升级方法、装置、电子设备和可读存储介质,以至少解决现有技术中需要在flash中划分空间用作IAP升级程序存储区所导致的浪费flash资源的问题。
根据本申请实施例的一个方面,提供了一种软件升级方法,包括:在接收到升级命令之后,从应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;所述升级程序接收更新应用程序;所述升级程序将所述更新应用程序更新到所述设备中。
进一步地,所述应用程序的第二部分程序和所述升级程序保存在闪存中,所述应用程序的第二部分程序和位于所述升级程序中的所述应用程序的第一部分程序构成了所述应用程序,所述应用程序在运行时对所述升级程序中的所述应用程序的第一部分程序进行代码复用;和/或,所述应用程序的第一部分程序还包括:所述应用程序中在升级过程中保持固化不变的代码部分。
进一步地,所述闪存中包括第一空间和第二空间,其中,所述第一空间用于保存所述应用程序的第二部分程序,所述第二空间用于保存所述升级程序。
进一步地,所述第一空间和所述第二空间为连接的存储空间,所述第一空间的起始地址小于所述第二空间的起始地址。
进一步地,所述升级程序将所述更新应用程序更新到所述设备中包括:所述升级程序将所述更新应用程序中的第三部分程序保存在所述第一空间中,其中,所述更新应用程序中的第三部分程序和所述应用程序中的第一部分程序组成所述更新应用程序;所述更新应用程序在运行时复用保存在所述第二空间中的所述应用程序的第一部分程序。
进一步地,将所述应用程序和所述升级程序配置在同一软件工程中进行编译,以使所述应用程序在运行时能够查找到复用代码的调用接口。
进一步地,将所述应用程序和所述升级程序进行编译包括:在分散加载文件中,单独分配一段闪存空间来存储所述升级程序的代码,以将所述升级程序的代码和数据分开存放;在分散加载文件中,单独分配一段内存空间来存储所述升级程序的数据;将所述升级程序使用的公共函数接口固化到预先分配的闪存地址段中。
进一步地,所述升级程序接收更新应用程序包括:所述升级程序将所述闪存中除所述升级程序之外的其他程序擦除,并在擦除之后接收所述更新应用程序;和/或,所述升级程序将所述更新应用程序更新到所述设备中之后,所述方法还包括:复位所述设备。
进一步地,在擦除之前,所述方法还包括以下至少之一:将所述升级程序、所述升级程序使用的公共函数接口和/或所述升级程序使用的常量固化在预先分配的闪存地址段中;将所述升级程序使用的可读可写变量、栈顶指针和栈占用的内存固化到预先分配的内存中;关闭在所述应用程序中使用但未在所述升级程序中使用到的中断;在进入升级后,将所述升级程序切换至逻辑死循环执行;在升级过程中,不擦除中断向量表,在升级完成,将所述中断向量表擦除并写入新的中断向量表。
进一步地,所述应用程序的第一部分程序包括:消息传输层和启动文件,所述应用程序的第二部分程序包括:应用功能、接口驱动和系统初始化,其中,所述启动文件用于在所述设备中启动所述应用程序,所述系统初始化用于在所述应用程序启动时或启动后进行初始化,所述接口驱动用于对硬件接口进行驱动,所述消息传输层用于进行消息的传输,所述应用功能用于控制所述设备执行相应的功能。
根据本申请实施例的另一个方面,还提供了一种软件升级装置,包括:调整模块,位于应用程序中,用于在接收到升级命令之后,从所述应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;接收模块,位于所述升级程序中,用于接收更新应用程序;更新模块,位于所述升级程序中,用于将所述更新应用程序更新到所述设备中。
根据本申请实施例的另一个方面,还提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述的方法步骤。
根据本申请实施例的另一个方面,还提供了一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现上述的方法步骤。
在本申请实施例中,采用了在接收到升级命令之后,从应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;所述升级程序接收更新应用程序;所述升级程序将所述更新应用程序更新到所述设备中。通过本申请解决了现有技术中需要在flash中划分空间用作IAP升级程序存储区所导致的浪费flash资源的问题,从而减少了IAP升级对flash空间的占用,节约了flash资源。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据相关技术中的IAP程序与APP程序在flash中的示意图;
图2是根据本申请实施例的IAP程序和APP程序在flash中的示意图;
图3是根据本申请实施例的软件升级方法的流程图;
图4是根据相关技术中的升级过程的示意图;
图5是根据本申请实施例的升级过程的示意图;以及,
图6是根据本申请实施例的APP和IAP在同一工程进行编译的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在以下实施方式中涉及到对设备进行升级的技术方案,下面首先对设备升级中涉及到的技术属于进行说明。
flash和RAM
flash中文为闪存,英文全称为Flash EEPROM Memory。flash不仅具备电子可擦除可编程(的性能,还可以快速读取数据,使数据不会因为断电而丢失。随机存取存储器(Random Access Memory,简称为RAM),也叫主存,是与处理器直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM处理器或者处理单元失电后数据会丢失,flash处理器或者处理单元失电后数据不会丢失。RAM处理器或者处理单元数据读取速度要快于flash处理器或者处理单元。
中断向量表
中断向量是指中断服务程序入口地址的偏移量与段基址,一个中断向量占据预定数量字节空间。中断向量表的作用就是按照中断类型号从小到大的顺序存储对应的中断向量。在中断响应过程中,处理器通过获取的中断类型号(即中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,根据中断向量将程序流程转向中断服务程序的入口地址。
分散加载文件
分散加载(scatter)文件是一个文本文件,它可以用来描述高级精简指令集计算机(Advanced RISC Machine,简称为ARM)连接器生成映像文件时所需要的信息。ARM中的各种源文件(包括汇编文件,C语言程序及C++程序等)经过ARM编译器编译后生成ELF格式的目标文件。这些目标文件和相应的C/C++运行时用到的库经过ARM连接器处理后,生成ELF格式的映像文件(image),这种ELF格式的映像文件是一种二进制文件,也是一种可执行文件,可被写入嵌入式设备的ROM中。
ARM映像文件的组成:ARM映像文件是一个层次性结构的文件,包括了域(region),输出段(output section)和输入段(input section)。一个映像文件由一个或者多个域组成;每个域最多由三个输出段组成;每个输出段又包含一个或者多个输入段;各输入段包含了目标文件中的代码和数据。所谓域,指的就是整个二进制(bin)映像文件所处在的区域,它又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的整个bin文件所在的地址空间就是加载域,当然程序一般都不会放在flash里执行,一般都会搬到RAM里运行工作,它们在被搬到RAM里工作所处的地址空间就是运行域。
用户输入的Code(代码),一般有代码部分和数据部分,这就是所谓的输入段。每个输入段都有相应的属性,可以为只读(ro)、可读写的(rw)以及初始化成0的(zi),其中,rw表示已经初始化的静态变量,该变量有初始值;zi标识未初始化的静态变量,该变量无初始值;ro表示程序定义的常量和常数(const)型数据。ARM连接器根据各输入段的属性将这些输入段分组,再组成对应属性的输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。在运行域中这些输出段并不连续,但rw和zi一定是连着的。zi段和rw段中的数据其实可以是rw属性。
通常一个映像文件中包含若干个域,各个域又包含若干的输出段。ARM连接器就需要知道分组信息和定位信息以决定生成相应的映像文件,其中,分组信息用于确定如何各将输入段组织成相应的输出段和域,定位信息用于确定各个域在存储器空间中的起始地址。这些信息可以使用一个配置文件(即分散加载文件)告诉ARM连接器相关的地址映射关系。
以下实施方式可以应用到各种使用flash保存应用程序(如固件程序)的设备中,例如,可以应用到消防领域的设备中。在这些设备中使用了具有计算能力的处理器或者处理单元(如单片机等)执行应用程序,应用程序是存储在flash中,这就导致了在升级的时候应用程序无法自己擦除自己,因此,需要IAP来进行升级。在使用IAP进行升级的时候,IAP程序与应用(Application,简称为APP)程序中有绝大部分代码是重复的,图1是根据相关技术中的IAP程序与APP程序在flash中的示意图,如图1所示,在flash空间中从低地址到高地址分为了三块空间:保存IAP程序的空间、保存APP程序的空间和参数区,其中,参数区可以保存各种参数,例如,系统参数、操作记录、报警记录的。IAP程序可以包括如下部分:启动文件、系统初始化、通讯接口驱动、消息传输层、升级协议实现,其中,启动文件用于对程序进行切动,系统初始化用于对程序启动的软件系统进行初始化配置,通讯接口驱动用于驱动通讯接口,消息传输层用于对消息进行传输,升级协议实现用于按照预先配置的升级协议进行APP的升级。APP程序可以包括如下部分:启动文件、系统初始化、通讯接口驱动、消息传输层和应用功能,其中,应用功能用于在应用程序运行所在的设备上实现功能。通过图1可以看出,在IAP程序和APP程序中,除了升级协议实现部分和应用功能部分不同,其他像启动代码、系统初始化、通讯接口驱动、消息传输层的代码都是重复的。但是,由于IAP的运行机制问题,不得不额外拷贝一份代码给IAP程序使用,这导致了flash空间的浪费。需要说明的是,图1示出的APP程序或IAP程序所包括的部分仅仅是个例子,并不限于此。
为了解决上述问题,在以下实施方式中提供了一种软件升级方法,图3是根据本申请实施例的软件升级方法的流程图,如图3所示,下面对图3中涉及到的方法所包括的步骤进行说明。
步骤S302,在接收到升级命令之后,从应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序。
在该步骤中涉及到两个程序,一个是应用程序,另一个是升级程序,其中,应用程序可以是运行在设备中的固件,例如,用电监测设备可以插在插座上,耗电设备(如空调等电器)插在用电监测设备上,通过用电监测设备可以对耗电设备的用电情况进行监测。用电监测设备会对的支路电压、电流、温度、漏电、打火等状态量进行实时监测,当监测值大于设定的报警阈值时,报警信息会推送给计算设备和/或消防平台,实现本地和远程用电系统安全监测。用电监测设备中将监测值与报警阈值进行比较以及发送报警信息等功能均需要用电监测设备中软件支持,该软件就是步骤S302中所称的应用程序。
用电监测设备也是需要进行软件更新的,例如报警阈值需要调低或者发送报警的方式需要改变等,此时需要将用电监测设备中的旧的应用程序删除,然后再将更新应用程序更新到用电监测设备中。旧的应用程序不能自行删除,因此在用电监测设备中也配置了升级程序用于升级。升级程序也需要使用用电监测设备中的一些功能,这些功能往往是通过应用程序来实现的,所以在升级程序中会将应用程序均复制一遍也方便升级程序使用,在这种情况下,在用电监测设备中就存在两份应用程序了,浪费了用电监测设备内部的存储空间。在步骤S302中,仅将应用程序中的第一部分程序放在升级程序中,该部分程序是执行所述升级过程中所需要的程序,这样升级程序就包括:用于执行升级过程的程序和所述应用程序中的第一部分程序。即通过该步骤不再需要将应用程序全部再复制一遍到升级程序中,从而节约了设备内部的存储空间。
在该步骤中,作为一个可选的方式,为了减少应用程序升级包的大小,还可以将所述应用程序中在升级过程中保持固化不变的代码部分也作为所述应用程序的第一部分程序,放在升级程序中。这部分固化不变的代码部分可以包括固定算法、日志接口、驱动等,这部分也配置在升级程序中,这样可以减小APP升级包大小。在减小应用程序升级包的大小之后,该升级包就可以在一些低速率环境上传输,例如,可以在消防二总线、低速率空口等传输,从而提高产品的竞争优势。
需要说明的是,应用程序中哪部分程序是在执行升级过程中所需要的程序可以预先配置好的,根据预先的配置将这部分在升级过程中需要使用的程序放入到升级程序中。
步骤S304,所述升级程序接收更新应用程序。
在该步骤中,由于升级程序包括了用于执行升级过程的程序和升级过程中所需要的应用程序中的第一部分程序,因此,升级程序可以接收到更新应用程序。更新应用程序也即收到升级命令后接收的新的应用程序,用于实现设备的更新升级。
步骤S306,所述升级程序将所述更新应用程序更新到所述设备中。通过该步骤就可以完成对设备的应用程序的升级。
在上述步骤中,升级程序中仅包括了应用程序中的第一部分程序,并没有将应用程序全部拷贝一遍到升级程序中,节约了设备内部的存储空间。考虑到类似于固件这一类应用程序一般均保存在闪存中,因此通过上述步骤解决了现有技术中需要在flash中划分空间用作IAP升级程序存储区所导致的浪费flash资源的问题,从而减少了IAP升级对flash空间的占用,节约了flash资源。
下面以所述应用程序的第二部分程序和所述升级程序保存在闪存中为例进行说明。在上述图3示出的步骤中,升级程序中保存了应用程序的部分代码,这使得升级程序所占的存储空间变小。对于应用程序来讲,可以在闪存中保存一份完整的应用程序,即所述应用程序的第二部分程序和位于所述升级程序中的所述应用程序的第一部分程序构成了所述应用程序。在这种情况下,升级程序中的应用程序的第一部分程序就被保存了两遍,一遍保存在升级程序中,另一遍保存在应用程序中。为了进一步节约闪存空间,可以在应用程序中不保存在升级程序中已经保存过的部分程序,如果应用程序需要使用这部分代码时(例如在运行时),可以对所述升级程序中的所述应用程序的第一部分程序进行代码复用。通过该可选的实施方式,应用程序所在的存储空间也变小了,能够进一步节约存储空间。
通过上述可选实施方式可知,应用程序的一部分被保存在了升级程序中,鉴于升级程序和应用程序均保存在闪存中,为了能够对闪存的使用更加规范,可以为升级程序和应用程序在闪存中开辟单独的存储空间,即在该可选实施方式中所述闪存中包括第一空间和第二空间,其中,所述第一空间用于保存所述应用程序的第二部分程序,所述第二空间用于保存所述升级程序。这种储存方式将升级程序和应用程序分开存储,这样有利于在升级过程中擦除相关闪存空间中内容,并进行升级。
由于应用程序的一部分保存在第二空间中,另一部分保存在第一空间中,因此,在升级应用时可以对保存在第一空间中的另一部分程序进行升级,即在一个可选的实施方式中,所述升级程序将所述更新应用程序更新到所述设备中可以包括如下步骤:所述升级程序将所述更新应用程序中的第三部分程序保存在所述第一空间中,其中,所述更新应用程序中的第三部分程序和所述应用程序中的第一部分程序组成所述更新应用程序;所述更新应用程序在运行时复用保存在所述第二空间中的所述应用程序的第一部分程序。在本申请实施例中的第一部分程序、第二部分程序、以及第三部分程序,只是用于区分不同语境下的程序对象,不带有任何的顺序性限定。
通过该可选实施方式,在升级的时候可以只需要对应用程序的第二部分程序进行升级,提高了升级效率。应用程序中的哪些部分保存在升级程序,哪些部分作为应用程序本身进行保存,可以是预先配置的,例如,所述应用程序的第一部分程序(即保存在第二空间中)包括:消息传输层和启动文件,所述应用程序的第二部分程序(即保存在第一空间中)包括:应用功能、接口驱动和系统初始化,其中,所述启动文件用于在所述设备中启动所述应用程序,所述系统初始化用于在所述应用程序启动时或启动后进行初始化,所述接口驱动用于对硬件接口进行驱动,所述消息传输层用于进行消息的传输,所述应用功能用于控制所述设备执行相应的功能。
上述实施方式中的应用程序是用于对设备进行控制实现相关功能的,在设备中会有各种中断需要进行处理,中断相关的处理会保存在中断向量表中,而中断向量表一般保存在flash中低地址部分,考虑到应用程序使用该中断向量表,因此,可以将应用程序保存在低地址空间。即在该可选实施方式中,所述第一空间和所述第二空间为连接的存储空间,所述第一空间的起始地址小于所述第二空间的起始地址。通过该可选实施方式更加有利于应用程序升级时对中断向量表的处理。上述实施方式中的升级程序可以为IAP程序,下面以IAP程序(简称为IAP)和APP程序(简称为APP)为例进行说明。
图2是根据本申请实施例的IAP程序和APP程序在flash中的示意图,如图2所示,设备中的flash可以分为三个区域,从低地址到高地址分别为用于保存APP的第一空间、用于保存IAP的第二空间和用于保存参数区的空间,参数区保存的参数可以包括:系统参数、操作记录和/或报警记录等。在APP中包括了三部分:应用功能、通讯接口驱动(是接口驱动的一种)、系统初始化,原来APP中的消息传输层和启动文件保存在了用于保存IAP的第二空间,APP在使用消息传输层和启动文件时通过复用IPA代码的方式来实现。在IAP中包括了三部分:升级协议实现(即用于执行升级过程的程序)、消息传输层和启动文件,原来APP中的通讯接口驱动和系统初始化由于在升级过程中是不需要的,所以这两部分内容被裁剪掉了。通过图2可知,位于第一空间内的应用功能、通讯接口驱动和系统初始化,以及位于第二空间内的消息传输层和启动文件构成了完成的APP。
由于应用程序是通过部分代码的方式来运行的,为了更加便于应用程序能够找到复用代码的调用接口,可以将所述应用程序和所述升级程序配置在同一软件工程中进行编译,这样所述应用程序在运行时就能够很容易查找到复用代码的调用接口了。图6是根据本申请实施例的APP和IAP在同一工程进行编译的示意图,如图6所示,工程(Project)名称为设备IAP,其下有两个文件夹,一个是iap,一个是app,两个文件夹中分别放置了IAP和APP的代码,这样就可以一起进行编译链接。
在编译的过程中,为了能够使更新应用程序更容易查找到IAP中代码和数据对应的地址,可以通过分配单独的存储空间的方式来进行编译,即将所述应用程序和所述升级程序进行编译可以包括如下步骤:在分散加载文件中,单独分配一段闪存空间来存储所述升级程序的代码,以将所述升级程序的代码和数据分开存放;在分散加载文件中,单独分配一段内存空间来存储所述升级程序的数据;将所述升级程序使用的公共函数接口固化到预先分配的闪存地址段中。通过该可选的实施方式,可以使得更新应用程序更容易对IAP中的代码进行复用。
在另一个可选的实施方式中,在升级过程中会涉及到旧应用程序的擦除,下面通过图4和图5来说明擦除和升级方式的改变。
图4是根据相关技术中的升级过程的示意图,如图4所示,APP等待升级指令,APP在接收到升级指令之后跳转到IAP。IAP擦除APP程序(需要注意的是,此时IAP中还保存着一份完整的APP程序),然后,IAP中接收并并更新APP程序,LAP升级完成跳转至APP运行。
图5是根据本申请实施例的升级过程的示意图,如图5所示,APP等待升级指令,APP在接收到升级指令后跳转到IAP。IAP擦除出了消息传输层和升级协议实现之外的其他代码,IAP中接收并更新APP程序(需要说明的是,下载的APP中可以不包括在升级程序中的应用程序的第一部分程序,这样可以减少下载流量,提高升级成功的概率),LAP升级完成,复位设备。通过图5可知,在升级的过程中与图4存在两个区别之处:一是,所述升级程序将所述闪存中除所述升级程序之外的其他程序擦除,并在擦除之后接收所述更新应用程序;二是,所述升级程序将所述更新应用程序更新到所述设备中之后,复位所述设备。这是因为在图5示出的流程中在擦除之后,闪存中就没有APP的其他模块了。为了使得IAP的升级更加稳定,在一个可选的实施方式中,在擦除之前,还可以执行以下至少之一:将所述升级程序、所述升级程序使用的公共函数接口和/或所述升级程序使用的常量固化在预先分配的闪存地址段中;将所述升级程序使用的可读可写变量、栈顶指针和栈占用的内存固化到预先分配的内存中;关闭在所述应用程序中使用但未在所述升级程序中使用到的中断;在进入升级后,将所述升级程序切换至逻辑死循环执行;在升级过程中,不擦除中断向量表,在升级完成,将所述中断向量表擦除并写入新的中断向量表。通过该可选实施方式可以保证升级的稳定。
下面结合一个例子对上述可选实施方式进行说明。在该例子中,提供了一种新的软件升级方法,可以去除其中重复代码,而不影响APP功能与IAP升级功能的使用。
1.将APP1(未升级的APP)与IAP放在同一工程进行编译链接,这样APP1运行时就可以找到IAP对应复用代码的调用接口。
2.APP1与IAP编译后,其代码(code)及数据(data)地址记为iap_code1及iap_data1。APP2(升级后的APP)与IAP编译后,其code及data地址记为iap_code2及iap_data2,如果没有合理配置,正常编译出来后iap_code1与iap_code2,iap_data1与iap_data2的加载与执行地址是不一样的,会导致APP2更新后无法正常运行,因为flash中的IAP为APP1对应的地址。为了解决这个问题,在本例子中提供了一种可选的配置方式,当然也可以采用其他的配置方式,在此不再一一赘述。
该可选配置方式如下:
A.在分散加载文件中,单独分配一块flash空间用来存储IAP代码,将IAP的code与data单独存放.
B.在分散加载文件中,单独分配一块ram空间来执行IAP程序中的data.
C.为了保证IAP的编译后面程序稳定性,需要将IAP使用到的公共函数接口固化至预分配的指定flash地址段(.MY_SECTION),这样可以防止APP2使用了新的接口后,IAP编译后其相关的地址会发生变化,导致APP2运行异常。
3.可以通过IAP中不调用APP中的任何一个接口的方式,来使IAP能正常运行。这是因为如果调用了,当升级时擦除APP后,IAP则可能会运行崩溃。保证不调用APP接口的方式有很多种,例如:
a.将IAP升级协议实现及消息传输层代码固化至预分配的指定flash地址(LR_IROM2),这样擦除APP后,不会影响IAP代码。
b.将IAP使用到的公共函数接口固化至预分配的指定flash地址(.MY_SECTION),同上,APP擦除后,不会影响IAP代码。
c.将IAP使用到的常变量固化至预分配的指定flash地址(LR_IROM2)。
d.将IAP使用到的可读可写变量固化至预分配的指定raw地址(RW_IRAW2)。
e.栈顶指针及其占用内存固化至预分配的raw地址(RW_IRAW2)。
f.进入升级时,关闭APP中使用到但IAP中未使用的中断。这样可以防止当APP擦除后,中断一旦触发程序会崩溃的问题。
g.进入升级后,使程序切换致IAP代码逻辑死循环执行,这也可以防止当APP擦除后,程序出现崩溃的问题。
h.升级过程中,第一包数据是中断向量表数据,可以特殊处理,不能立即擦除,等升级完成,校验通过后再擦除写入。这样也可以防止IAP中产生中断后,程序出现崩溃的问题。
通过上述例子设计了一种新的软件升级方法,可以去除传统升级方案IAP与APP的重复代码,而不影响APP功能与IAP升级功能的使用;另外,还可以将APP中固化不变的代码:像日志、公共队列、固化算法等放入到IAP程序段中,这样可以减小APP升级程序包大小,省流量外,还可以提高程序升级一次通过率,整体提高程序升级效率。
综上,通过上述可选实施例减小了flash的资源开消,在主控处理器或者处理单元选型上可以选择资源更小,成本更低的主控处理器或者处理单元,从而降低了设备总体成本,提高了设备市场竞争力。
在本实施例中,提供一种电子设备,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行以上实施例中的方法。
上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。
该本实施例中就提供了这样的一种装置。该装置被称为一种软件升级装置,包括:调整模块,位于应用程序中,用于在接收到升级命令之后,从所述应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;接收模块,位于所述升级程序中,用于接收更新应用程序;更新模块,位于所述升级程序中,用于将所述更新应用程序更新到所述设备中。
该系统或者装置用于实现上述的实施例中的方法的功能,该系统或者装置中的每个模块与方法中的每个步骤相对应,已经在方法中进行过说明的,在此不再赘述。
可选地,所述应用程序的第二部分程序和所述升级程序保存在闪存中,所述应用程序的第二部分程序和位于所述升级程序中的所述应用程序的第一部分程序构成了所述应用程序,所述应用程序在运行时对所述升级程序中的所述应用程序的第一部分程序进行代码复用;所述应用程序的第一部分程序还包括:所述应用程序中在升级过程中保持固化不变的代码部分。
可选地,所述闪存中包括第一空间和第二空间,其中,所述第一空间用于保存所述应用程序的第二部分程序,所述第二空间用于保存所述升级程序。
可选地,所述第一空间和所述第二空间为连接的存储空间,所述第一空间的起始地址小于所述第二空间的起始地址。
可选地,所述更新模块用于将所述更新应用程序中的第三部分程序保存在所述第一空间中,其中,所述更新应用程序中的第三部分程序和所述应用程序中的第一部分程序组成所述更新应用程序;所述更新应用程序在运行时复用保存在所述第二空间中的所述应用程序的第一部分程序。
可选地,将所述应用程序和所述升级程序配置在同一软件工程中进行编译,以使所述应用程序在运行时能够查找到复用代码的调用接口。
可选地,将所述应用程序和所述升级程序进行编译包括:在分散加载文件中,单独分配一段闪存空间来存储所述升级程序的代码,以将所述升级程序的代码和数据分开存放;在分散加载文件中,单独分配一段内存空间来存储所述升级程序的数据;将所述升级程序使用的公共函数接口固化到预先分配的闪存地址段中。
可选地,所述接收模块用于将所述闪存中除所述升级程序之外的其他程序擦除,并在擦除之后接收所述更新应用程序;和/或,所述更新模块还用于将所述更新应用程序更新到所述设备中之后,复位所述设备。
可选地,还包括:配置模块,用于执行以下至少之一:将所述升级程序、所述升级程序使用的公共函数接口和/或所述升级程序使用的常量固化在预先分配的闪存地址段中;将所述升级程序使用的可读可写变量、栈顶指针和栈占用的内存固化到预先分配的内存中;关闭在所述应用程序中使用但未在所述升级程序中使用到的中断;在进入升级后,将所述升级程序切换至逻辑死循环执行;在升级过程中,不擦除中断向量表,在升级完成,将所述中断向量表擦除并写入新的中断向量表。
可选地,所述应用程序的第一部分程序包括:消息传输层和启动文件,所述应用程序的第二部分程序包括:应用功能、接口驱动和系统初始化,其中,所述启动文件用于在所述设备中启动所述应用程序,所述系统初始化用于在所述应用程序启动时或启动后进行初始化,所述接口驱动用于对硬件接口进行驱动,所述消息传输层用于进行消息的传输,所述应用功能用于控制所述设备执行相应的功能。
通过上述可选实施方式,解决了现有技术中需要在flash中划分空间用作IAP升级程序存储区所导致的浪费flash资源的问题,从而减少了IAP升级对flash空间的占用,节约了flash资源。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (13)
1.一种软件升级方法,其特征在于,包括:
在接收到升级命令之后,从应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;
所述升级程序接收更新应用程序;
所述升级程序将所述更新应用程序更新到所述设备中。
2.根据权利要求1所述的方法,其特征在于,所述应用程序的第二部分程序和所述升级程序保存在闪存中,所述应用程序的第二部分程序和位于所述升级程序中的所述应用程序的第一部分程序构成了所述应用程序,所述应用程序在运行时对所述升级程序中的所述应用程序的第一部分程序进行代码复用;和/或,所述应用程序的第一部分程序还包括:所述应用程序中在升级过程中保持固化不变的代码部分。
3.根据权利要求2所述的方法,其特征在于,所述闪存中包括第一空间和第二空间,其中,所述第一空间用于保存所述应用程序的第二部分程序,所述第二空间用于保存所述升级程序。
4.根据权利要求3所述的方法,其特征在于,所述第一空间和所述第二空间为连接的存储空间,所述第一空间的起始地址小于所述第二空间的起始地址。
5.根据权利要求3所述的方法,其特征在于,所述升级程序将所述更新应用程序更新到所述设备中包括:
所述升级程序将所述更新应用程序中的第三部分程序保存在所述第一空间中,其中,所述更新应用程序中的第三部分程序和所述应用程序中的第一部分程序组成所述更新应用程序;所述更新应用程序在运行时复用保存在所述第二空间中的所述应用程序的第一部分程序。
6.根据权利要求2所述的方法,其特征在于,将所述应用程序和所述升级程序配置在同一软件工程中进行编译,以使所述应用程序在运行时能够查找到复用代码的调用接口。
7.根据权利要求6所述的方法,其特征在于,将所述应用程序和所述升级程序配置在同一软件工程中进行编译包括:
在分散加载文件中,单独分配一段闪存空间来存储所述升级程序的代码,以将所述升级程序的代码和数据分开存放;
在分散加载文件中,单独分配一段内存空间来存储所述升级程序的数据;
将所述升级程序使用的公共函数接口固化到预先分配的闪存地址段中。
8.根据权利要求2所述的方法,其特征在于,
所述升级程序接收更新应用程序包括:所述升级程序将所述闪存中除所述升级程序之外的其他程序擦除,并在擦除之后接收所述更新应用程序;和/或,
所述升级程序将所述更新应用程序更新到所述设备中之后,所述方法还包括:复位所述设备。
9.根据权利要求8所述的方法,其特征在于,在擦除之前,所述方法还包括以下至少之一:
将所述升级程序、所述升级程序使用的公共函数接口和/或所述升级程序使用的常量固化在预先分配的闪存地址段中;
将所述升级程序使用的可读可写变量、栈顶指针和栈占用的内存固化到预先分配的内存中;
关闭在所述应用程序中使用但未在所述升级程序中使用到的中断;
在进入升级后,将所述升级程序切换至逻辑死循环执行;
在升级过程中,不擦除中断向量表,在升级完成,将所述中断向量表擦除并写入新的中断向量表。
10.根据权利要求2至9中任一项所述的方法,其特征在于,所述应用程序的第一部分程序包括:消息传输层和启动文件,所述应用程序的第二部分程序包括:应用功能、接口驱动和系统初始化,其中,所述启动文件用于在所述设备中启动所述应用程序,所述系统初始化用于在所述应用程序启动时或启动后进行初始化,所述接口驱动用于对硬件接口进行驱动,所述消息传输层用于进行消息的传输,所述应用功能用于控制所述设备执行相应的功能。
11.一种软件升级装置,其特征在于,包括:
调整模块,位于应用程序中,用于在接收到升级命令之后,从所述应用程序跳转到升级程序,其中,所述应用程序运行在设备上并控制所述设备执行相应的功能,所述升级程序包括:用于执行升级过程的程序和所述应用程序中的第一部分程序,所述应用程序中的第一部分程序包括:在执行所述升级过程中需要的程序;
接收模块,位于所述升级程序中,用于接收更新应用程序;
更新模块,位于所述升级程序中,用于将所述更新应用程序更新到所述设备中。
12.一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1至10任一项所述的方法步骤。
13.一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现权利要求1至10任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211640477.7A CN115756551A (zh) | 2022-12-20 | 2022-12-20 | 软件升级方法、装置、电子设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211640477.7A CN115756551A (zh) | 2022-12-20 | 2022-12-20 | 软件升级方法、装置、电子设备和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115756551A true CN115756551A (zh) | 2023-03-07 |
Family
ID=85348570
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211640477.7A Pending CN115756551A (zh) | 2022-12-20 | 2022-12-20 | 软件升级方法、装置、电子设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115756551A (zh) |
-
2022
- 2022-12-20 CN CN202211640477.7A patent/CN115756551A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5537596A (en) | Method and apparatus for overriding resource maps in a computer system | |
US6314567B1 (en) | Apparatus and method for transferring state data when performing on-line replacement of a running program code and data | |
US6269442B1 (en) | Apparatus and method for on-line replacement of a running program code and data using checkpoints | |
CN111258587B (zh) | 一种安卓应用插件化的实现方法、装置、设备及存储介质 | |
KR100415371B1 (ko) | 컴퓨터 | |
JPH10111837A (ja) | メモリ装置 | |
CN114756296B (zh) | 可读写挂载启动方法、装置、存储介质及电子设备 | |
US20050071856A1 (en) | Dynamically loadable stub modules | |
CN108509215B (zh) | 一种系统软件的更换方法、装置、终端设备及存储介质 | |
CN113110853B (zh) | 一种组态数据在线下载方法、装置及电子设备 | |
CN103077043A (zh) | 一种快速启动及运行Linux的方法 | |
JP2012164350A (ja) | 携帯型データ記憶媒体のメモリ管理 | |
CN112306540A (zh) | 一种多工程独立编译方法、系统、终端及介质 | |
CN110764486B (zh) | 车载控制器的运行方法、装置、车载控制器及存储介质 | |
CN114691178B (zh) | 一种基于EtherCAT通讯驱动器的固件升级方法及装置 | |
CN115756551A (zh) | 软件升级方法、装置、电子设备和可读存储介质 | |
CN110471675B (zh) | 一种程序烧录方法、系统、装置及计算机可读存储介质 | |
US20190384590A1 (en) | Control apparatus and program updating method | |
CN103761118A (zh) | 一种智能卡及智能卡内部署应用的方法 | |
JP6676791B2 (ja) | 情報処理装置 | |
CN114428633A (zh) | 一种固件升级方法、装置以及设备 | |
CN113127852A (zh) | 基于芯片卡的se应用管理方法、装置及存储介质 | |
CN118409786B (zh) | 基于多进程配置动态链接库的方法、装置、设备及介质 | |
KR20000003162A (ko) | 효율적인 플래시 메모리 운용 방법 | |
CN115061738B (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 |