一种用于嵌入式设备的应用程序升级方法及存储介质与流程

文档序号:16627257发布日期:2019-01-16 06:13阅读:134来源:国知局
一种用于嵌入式设备的应用程序升级方法及存储介质与流程

本发明涉及嵌入式设备,具体涉及一种用于嵌入式设备的应用程序升级方法及存储介质。



背景技术:

随着嵌入式系统在通信及工业控制领域的广泛应用,为了提高产品的生命周期以及适应新的业务需求,通常需要对嵌入式系统进行现场升级,其中一项重要的升级内容包括对嵌入式设备中应用程序的升级。

嵌入式设备主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,它是集软硬件于一体的可独立工作的“器件”,嵌入式设备一般不具备计算机处理系统那样大容量的硬盘,它大多使用非易失性存储器(flash、rom或ram)作为存储介质,通常,引导程序、应用程序、通讯协议、数据库系统、标准化浏览器等嵌入式软件就存储在该存储器中。

应用程序(包括操作系统)是嵌入式软件的重要构成之一,用于控制其他程序运行,管理系统资源并为用户提供操作界面。对应用程序的更新升级关乎嵌入式软件的功能实现和自我修复,在使用应用程序的自身命令实现自我更新升级的过程中,如果升级失败,将可能导致软件系统崩溃。为保证应用程序升级过程的可靠性,目前通常采用仿真器、编程器对待升级版本进行预处理,再用烧录器将处理后的升级版本烧录到嵌入设设备的存储器中。然而,在采用烧录器对应用程序进行升级的过程中,由于与烧录器连接的接口通常设置于嵌入式设备的内部,需要拆卸嵌入式设备的外壳才能对其进行升级,如此,将导致升级操作过程复杂且耗时,使得用户体验效果差,此外,仿真器、编程器、烧录器的价格高昂,往往会推动用户的应用成本。

当前,也存在在线升级的方法,需要用户在计算机上下载厂家定制的上位机软件,将计算机和嵌入式设备进行连接,运行上位机软件以将待升级版本写入嵌入式设备的存储器中。这种升级方式虽摆脱了仿真器、编程器、烧录器等辅助工具的束缚,但需要用户持有计算机并熟练使用上位机软件,还存在连线、联网的繁琐流程,并不能满足便捷升级的应用要求。



技术实现要素:

本发明主要解决的技术问题是如何解决现有嵌入式设备在应用程序升级过程中操作方式复杂、用户体验差的问题。为解决上述技术问题,本申请提供了一种用于嵌入式设备的的应用程序升级方法及其装置。

根据第一方面,一种实施例提供一种用于嵌入式设备的应用程序升级方法,所述嵌入式设备与一外部存储设备连接,所述应用程序升级方法包括以下步骤:

接收步骤:接收用户输入的升级命令;

升级步骤:读取用户所选取的所述外部存储设备中的文件,并使用该文件对所述嵌入式设备的应用程序进行升级。

提供输入部件,用于供用户输入所述升级命令。

所述文件包括升级数据,所述升级步骤包括烧录步骤,所述烧录步骤包括:

读取所述文件中的升级数据;

擦除所述嵌入式设备的存储器中应用程序区内的数据;

将所述升级数据写入所述嵌入式设备的存储器中的应用程序区。

所述文件还包括头部数据;所述升级步骤还包括在烧录步骤之前的校验步骤,所述校验步骤包括:

读取所述文件的头部数据,所述头部数据包括设备型号信息和升级数据长度信息;

判断所述设备型号信息与所述嵌入式设备的型号是否匹配,并判断所述升级数据的长度和所述头部数据的长度之和与所述文件的实际长度是否匹配;

当判断匹配,才进行所述烧录步骤。

所述升级步骤还包括复位重启步骤,所述复位重启步骤位于所述烧录步骤之前,或者所述复位重启步骤位于所述校验步骤之后且烧录步骤之前;所述复位重启步骤:

在所述嵌入式设备的内存中设置升级标志位;

控制所述嵌入式设备执行重启,其中所述嵌入式设备重启过程中运行引导程序时当识别到所述升级标志位时,进行所述烧录步骤。

所述将所述升级数据写入所述嵌入式设备的存储器中的应用程序区,包括:

从所述升级数据的超始位置开始,每次根据预设的数据读取量读取所述升级数据中的一组数据;

将每次从所述升级数据中读取的一组数据写入所述嵌入式设备的存储器中的应用程序区,在每一组数据写入后,再从所述升级数据中读取下一组数据并将该下一组数据继续写入所述嵌入式设备的存储器中的应用程序区,直至所述升级数据全部写入为止。

所述将每次从所述升级数据中读取的一组数据写入所述嵌入式设备的存储器中的应用程序区,包括:

将读取的一组数据分解为多个预设字节长度的数据串;

对于每个数据串,将该数据串中的各个字节依次写入所述嵌入式设备的存储器中的应用程序区。

将一数据串写入所述嵌入式设备的存储器中的应用程序区之后,还包括字节比较步骤,所述字节比较步骤包括:

将该数据串中的各个字节与所述应用程序区中已写入的相应数据串的各个字节进行逐一比对,判断比对失败时,则重新写入该数据串,反之,将该数据串的下一个数据串继续写入所述嵌入式设备的存储器中的应用程序区。

还包括升级步骤之后的升级测试步骤,所述升级测试步骤包括:

控制所述嵌入式设备执行重启,在所述嵌入式设备运行引导程序时,引导所述嵌入式设备加载自身存储器中已写入应用程序区的升级数据,若加载成功,则判断所述嵌入式设备通过自身存储器中应用程序的升级测试。

根据第二方面,一种实施例提供一种计算机可读存储介质,包括程序,所述程序能够被处理器执行以实现如权利要求第一方面中所述的方法。

依据上述实施例的一种用于嵌入式设备的应用程序升级方法及存储介质,其包括接收步骤以接收用户输入的升级命令,升级步骤以读取用户所选取的所述外部存储设备中的文件,并使用该文件对所述嵌入式设备的应用程序进行升级。一方面,由于只需要一个存储有升级文件的外部存储设备即可,避免了嵌入式设备在于烧录器或电脑连接时进行升级的繁琐操作,使得本实施例提供的应用程序升级方法可适用于绝大多数的应用环境,可为用户带来便宜;另一方面,由于在用户输入升级命令之后即可执行嵌入式设备的应用程序升级过程,利于实现一键升级的简易操作效果,具有优越的用户操作体验。

附图说明

图1为stm32嵌入式设备的存储器中代码区布局的示意图;

图2为应用程序升级方法的流程图;

图3为升级步骤的流程图;

图4为烧录步骤的流程图;

图5为升级输入写入步骤的流程图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。

另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。

本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。

为清楚理解本申请的应用程序及应用程序区,这里将对嵌入式设备的运行机制进行简要说明。嵌入式设备的嵌入式软件包括引导程序(bootloader)和应用程序(userapplication),两者共同存储在嵌入设备的存储器中,以stm32类型的嵌入式设备为例,它的flash地址区间为0x08000000至0x080fffff,其中,地址区间0x08000000-0x08040000对应的是引导程序区,用来存储引导程序,而0x08040000-0x080fffff对应的是应用程序区,用来存储应用程序。需要说明的是,应用程序需要配合引导程序才能够正常加载,在嵌入式设备上电后,由引导程序实现少量指令和数据的输入,完成系统初始化过程,再由引导程序来控制输入应用程序,从而实现嵌入式设备的启动。

请参考图2,本申请公开一种用于嵌入式设备的应用程序升级方法,其包括步骤s100-s200。需要说明的是,为实现该应用程序升级方法,本实施例提供的嵌入式设备应当与一外部存储设备连接,且外部存储设备中应当预先存储有应用程序升级所需的文件(或称升级文件数据包),这里的外部存储设备可以是u盘、移动硬盘、内存卡等存储设备。

步骤s100,可称为接收步骤,主要用于接收用户输入的升级命令。在一实施例中,嵌入式设备应当提供输入部件,该输入部件供用户输入升级命令,这里的输入部件可以是触摸屏上的触摸按键、控制面板上的实体按键或键盘输入的代码指令等,这里不对升级命令的具体输入形式进行限制。

步骤s200,可称为升级步骤,主要用于读取用户所选取的外部存储设备中的文件,并使用该文件对嵌入式设备的应用程序进行升级。

在一实施例中,嵌入式设备识别并读取外部存储设备,用户在嵌入式设备上操作以选取外部存储设备中的文件,然后嵌入式设备接收步骤s100中用户通过输入部件输入的升级命令,开始步骤s200中的升级过程。可见图2和图3,步骤s200可包括步骤s210-s230,下面分别说明。

步骤s210,可称为校验步骤,主要用于判断用户在外部存储设备中选取的文件中的头部数据是否与嵌入式设备信息是否匹配。可见图3,该步骤s210可包括步骤s211-s223。

步骤s211,将用户在外部存储设备中选取的文件作为升级文件,该升级文件往往包括头部数据和升级数据,这里可读取升级文件中的头部数据,其中头部数据可包括设备型号信息和/或升级数据长度信息。

步骤s212,判断信息是否匹配,即判断头部数据与嵌入式设备信息和文件长度信息是否匹配,当判断匹配,则进入重启步骤s220及后续的烧录步骤s230;反之,则进入步骤s213。

在一具体实施例,判断设备型号信息与嵌入式设备的型号是否匹配,并判断所述升级数据的长度和所述头部数据的长度之和与所述文件的实际长度是否匹配(或者判断升级数据长度信息与升级文件中升级数据的实际长度是否匹配)并,若信息均匹配时,可确定升级文件符合校验,才能进一步地将符合校验的升级文件中的升级数据烧录至嵌入式设备的存储器中。

步骤s213,升级失败,此时,嵌入式设备可发出升级失败的提示信息,以指导用户重新开始步骤s100。

步骤s220,可称为重启步骤,见图3,该步骤s220可包括步骤s221-s222,分别说明如下。

步骤s221,在嵌入式设备的内存中设置升级标志位。

步骤s222,控制嵌入式设备执行重启,其中嵌入式设备重启过程中运行引导程序时当识别到该升级标志位,则进行烧录步骤s230。

本领域的技术人员应当理解,设置升级标志位的目的在于,在嵌入式设备初始化时就指示其进行下一步的烧录工作,若没有升级标志位,则嵌入式设备将执行引导程序后直接加载存储器中已有的应用程序,无法执行烧录工作。

需要说明的是,在嵌入式设备执行完烧录步骤s230之后,可消除内存中的升级标志位,以防再次重启时又执行烧录工作而导致设备无法正常启动。

步骤s230,可称为烧录步骤,主要是将升级文件中的升级数据写入嵌入式设备的存储器中的应用程序区。可见图3,该步骤s230可包括步骤s231-s233,下面将分别说明。

步骤s231,读取文件(升级文件)中的升级数据。

步骤s232,擦除嵌入式设备的存储器中应用程序区内的数据,即擦除应用程序区内旧版的应用程序。

步骤s233,将升级数据写入嵌入式设备的存储器中的应用程序区,即在应用程序区中写入新版的应用程序。见图4,该步骤s233可包括步骤s2331-s2339,分别说明如下。

步骤s2331,从升级数据的超始位置开始,每次根据预设的数据读取量来读取升级数据中的一组数据,这里的数据读取量由嵌入式设备的缓存区大小或者内存区大小决定,以防一次读取过多的数据而无法进行有效地缓存,那么,这里可采用2k、4k、8k的数据读取量(最后一次读取中,不满预设的数据读取量的按实际的数据量来读取)。在每获得一组数据后,才能够将每次从升级数据中读取的一组数据写入嵌入式设备的存储器中的应用程序区。

步骤s2332,将读取的一组数据分解为多个预设字节长度的数据串,这里预设的字节长度可根据处理器的执行速度而定,优选地,采用4个字节或8个字节的字节长度。例如,对于2k数据而言,其可分解为512个连续的4字节的数据串;对于(2k+1)数据而言,其可分解为512个连续的4字节的数据串,和最后一次写入1个字节的数据串。

步骤s2333,从嵌入式设备的存储器中应用程序区的起始位置开始,按照数据串的先后顺序将一数据串写入应用程序区。

步骤s2334,可称为字节比较步骤,主要是将步骤s2333中的数据串内的各个字节与应用程序区中已写入的相应数据串的各个字节进行逐一比对,判断比对失败时,则进入步骤s2335,反之(即比对成功时),则进入步骤s2336。

例如,在4个字节写入应用程序区之后,将已写入的各个字节与原4个字节进行比对,如果写入的字节和原字节完全一致时就认为比对成功。该字节比较步骤的目的是确保写入应用程序区的每个字节都不会发生写入错误。

步骤s2335,重新写入该数据串,以覆盖上次对于该数据串的写入区域。然后再执行步骤s2334,直至对比成功。

步骤s2336,判断步骤s2332中的一组数据是否全部写入应用程序区,若否,则进入步骤s2337,若是,则进入步骤s2338。

步骤s2337,将下一个数据串继续写入嵌入式设备的存储器中的应用程序区,为确保数据存储的连续性,应当将下一个数据串写在上一个数据串之后的地址位置。然后进行步骤s2334-s2336,直至将每个数据串均写入嵌入式设备的存储器中的应用程序区。

步骤s2338,判断升级数据是否全部写入嵌入式设备的存储器中的应用程序区,若是,则进入步骤s300,若否,则进入步骤s2339。

步骤s2339,在每一组数据写入后,再从升级数据中读取下一组数据,继续进行步骤s2332-s2338,以将该下一组数据继续写入嵌入式设备的存储器中的应用程序区,直至升级数据全部写入为止。

步骤s300,可称为升级测试步骤。控制嵌入式设备执行重启,在嵌入式设备运行引导程序时,引导嵌入式设备加载自身存储器中已写入应用程序区的升级数据,若加载成功,即设备可正常运行应用程序,则判断嵌入式设备通过自身存储器中应用程序的升级测试;若没有加载成功,即设备运行应用程序时发生系统崩溃、无法启动、操作失灵等情形时,则判断嵌入式设备未通过应用程序的升级测试,此时用户可重新刷机,选择正确的升级文件再次执行步骤s100-s200的升级操作。

在一实施例中,采用上述步骤s100-s300对stm32嵌入式设备进行应用程序的升级操作。嵌入式设备从外部存储设备(例如u盘)中读取升级文件,通过步骤s210对升级文件进行校验,再校验成功之后进行重启步骤s220及烧录步骤s230。在步骤s230中,每次以2k的数据读取量来读取升级数据,从嵌入式设备的存储器中应用程序区的0x08040000地址开始,每次以4个字节的字节长度将读取的一组数据写入应用程序区,直至2k对应的一组数据全部写入,然后按照步骤s2339继续从u盘内升级文件的升级数据中读取下一组数据,再进行步骤s2331-s2338的写入过程,直至升级数据全部写入应用程序区。在stm32嵌入式设备通过应用程序的升级测试后,即可认为该设备完成应用程序的升级操作。

本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。

以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1