CN109445823A - 一种mcu固件快速升级方法 - Google Patents
一种mcu固件快速升级方法 Download PDFInfo
- Publication number
- CN109445823A CN109445823A CN201811303377.9A CN201811303377A CN109445823A CN 109445823 A CN109445823 A CN 109445823A CN 201811303377 A CN201811303377 A CN 201811303377A CN 109445823 A CN109445823 A CN 109445823A
- Authority
- CN
- China
- Prior art keywords
- mcu
- code
- bin file
- constant
- upgrading
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种MCU固件快速升级方法,涉及MCU固件升级技术领域。本发明包括对MCU代码中常量数据、逻辑代码设计成若干常量数组和若干可重入函数;采用伪指令为常量数组以及可重入函数声明对应的段地址以及存储大小;升级时更改程序代码,对编译产生的整bin文件拆分,获取包含需要升级的常量数组或可重入函数的升级bin文件段;将升级bin文件烧写到MCU中。本发明通过将MCU代码的常量设计成若干常量数组以及将逻辑代码设计成若干可重入函数;升级时,将需要升级的常量数组或可重入函数拆分获取升级bin文件,并对升级bin文件修改后烧写至MCU中;提高MCU固件升级的效率、提高MCU升级过程中的系统稳定性。
Description
技术领域
本发明属于MCU固件升级技术领域,特别是涉及一种MCU固件快速升级方法。
背景技术
随着物联网技术快速发展,无线通信模块已经大量应用于制造、家电、医疗、物流、零售等行业。OTA固件升级技术作为无线通信模块的标配技术,在产品的生产、使用中发挥着重要作用。
无线通信模块通常使用单芯片方案,由一颗MCU和射频外设组成,模块可通过OTA技术对自身系统或者所连接的其他MCU进行固件升级。通用的升级方案是无线模块将完整固件从云端或者局域网下载到本地flash保存,在完成校验之后,无线模块MCU切换运行区域;或者进入boot区,将已经保存在flash中的固件读出并覆盖到运行区。
现有方案虽然技术成熟,但从云端或局域网下载完整固件,对系统稳定性和时间消耗较大。无线模块的完整固件在500k左右,无线模块连接的其他MCU完整固件也在64k左右,固件大小决定着系统执行固件下载、缓存、校验、烧写、传输等操作的时间开销。大部分MCU对flash操作是由cache完成,且flash写入易受到执行代码和外部因素影响,具有一定的风险,长时间处于flash读写状态,也增加了系统的不稳定性。
本发明致力于研发一种MCU固件快速升级方法,用于解决现有的MCU完整固件升级效率慢、时间开销大及其导致的系统不稳定的问题。
发明内容
本发明的目的在于提供一种MCU固件快速升级方法,通过将MCU代码的常量设计成若干常量数组以及将逻辑代码设计成若干可重入函数,在进行固件升级时,通过bin文件拆分软件将需要升级的常量数组或可重入函数拆分获取升级bin文件,并对升级bin文件修改后烧写至MCU中,实现了对MCU中固件的快速升级,解决了现有的MCU完整固件升级效率慢、时间开销大及其导致的系统不稳定的问题。
为解决上述技术问题,本发明通过以下技术方案实现:
本发明为一种MCU固件快速升级方法,包括如下:
代码设计:
对MCU中代码的常量数据设计成若干常量数组,并将MCU中代码的逻辑程序设计成若干可重入函数;
采用伪指令为所述常量数组声明对应的段地址以及存储大小;采用伪指令为所述可重入函数声明对应的段地址以及存储大小;
编译代码产生bin文件,并烧写到MCU中作为基础程序;
固件升级:
编写需要升级的程序代码,编译生成整bin文件;
采用bin文件拆分软件按照指定地址和大小对整bin文件拆分,获取包含需要升级的常量数组或可重入函数的升级bin文件段;
将升级bin文件段烧写到MCU中后,MCU执行软重启后运行升级后的代码。
优选地,编译产生的所述bin文件中,以所述伪指令声明的段地址为首址、以存储大小为长度的存储空间内存放对应的常量数组以及可重入函数。
优选地,所述将拆分后的所述升级bin文件烧写到MCU中包括如下过程:
将所述升级bin文件发送给MCU,所述MCU将其保存在flash或EEPROM中;
所述MCU进入boot区或者直接在cache中对程序运行区指定地址处的代码进行烧写;只包含所述常量数组和可重入函数的固件大小比完整固件要小很多,通常只有完整固件的二十分之一,具体固件长度由常量数组或可重入函数代码大小而定;由于在所述MCU中只需要保存备份非常少量的固件数据,那么原先用于备份完整固件的备份区,则可以直接当作flash使用,用于保存其他运行数据,极大的丰富了MCU的应用场景。
本发明具有以下有益效果:
本发明通过将MCU代码的常量设计成若干常量数组以及将逻辑代码设计成若干可重入函数,在进行固件升级时,通过bin文件拆分软件将需要升级的常量数组或可重入函数拆分获取升级bin文件,并对升级bin文件修改后烧写至MCU中,实现了对MCU中固件的快速升级;提高MCU固件升级的效率、降低升级的时间开销、提高MCU升级过程中的系统稳定性,方便快捷,操作方便。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下。
图1为本发明的一种MCU固件快速升级方法中代码设计的流程图;
图2为本发明的一种MCU固件快速升级方法中固件升级的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1-2所示,本发明为一种MCU固件快速升级方法,包括如下:
代码设计:
对MCU中代码的常量数据设计成若干常量数组,并将MCU中代码的逻辑程序设计成若干可重入函数;
采用伪指令为常量数组声明对应的段地址以及存储大小;采用伪指令为可重入函数声明对应的段地址以及存储大小;
使用伪指令#pragma或者__attribute__指定常量数组或者可重入函数代码的段,例如:在常量数组或可重入函数申明代码中添加:
__attribute__((section("section_name"))),
其作用是将可冲入函数或常量数组放入指定名为"section_name"对应的段中;
编译代码产生bin文件,并烧写到MCU中作为基础程序;
固件升级:
编写需要升级的程序代码,编译生成整bin文件;
采用bin文件拆分软件按照指定地址和大小对整bin文件拆分,获取包含需要升级的常量数组或可重入函数的升级bin文件段;
将拆分后的升级bin文件烧写到MCU中后,MCU执行软重启后运行升级后的代码。
其中,编译产生的bin文件中,以伪指令声明的段地址为首址、以存储大小为长度的存储空间内存放对应的常量数组以及可重入函数。
其中,将修改后的升级bin文件烧写到MCU中包括如下过程:
将升级bin文件发送给MCU,MCU将其保存在flash或EEPROM中;
MCU进入boot区或者直接在cache中对程序运行区指定地址处的代码进行烧写。
值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (3)
1.一种MCU固件快速升级方法,其特征在于,包括如下:
代码设计:
对MCU中代码的常量数据设计成若干常量数组,并将MCU中代码的逻辑程序设计成若干可重入函数;
采用伪指令为所述常量数组声明对应的段地址以及存储大小;采用伪指令为所述可重入函数声明对应的段地址以及存储大小;
编译代码产生bin文件,并烧写到MCU中作为基础程序;
固件升级:
更改程序代码,编译生成整bin文件;
采用bin文件拆分软件按照指定地址和指定大小,对整bin文件拆分,获取包含需要升级的常量数组或可重入函数的升级bin文件段;
将升级bin文件烧写到MCU中后,MCU执行软重启后运行升级后的代码。
2.根据权利要求1所述的一种MCU固件快速升级方法,其特征在于,编译产生的所述bin文件中,以所述伪指令声明的段地址为首址、以存储大小为长度的存储空间内存放对应的常量数组以及可重入函数。
3.根据权利要求1所述的一种MCU固件快速升级方法,其特征在于,所述将修改后的所述升级bin文件烧写到MCU中包括如下过程:
将所述升级bin文件发送给MCU,所述MCU将其保存在flash或EEPROM中;
所述MCU进入boot区或者直接在cache中对程序运行区指定地址处的代码进行烧写。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811303377.9A CN109445823A (zh) | 2018-11-02 | 2018-11-02 | 一种mcu固件快速升级方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811303377.9A CN109445823A (zh) | 2018-11-02 | 2018-11-02 | 一种mcu固件快速升级方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109445823A true CN109445823A (zh) | 2019-03-08 |
Family
ID=65550038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811303377.9A Pending CN109445823A (zh) | 2018-11-02 | 2018-11-02 | 一种mcu固件快速升级方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109445823A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262817A (zh) * | 2019-05-17 | 2019-09-20 | 福建星云电子股份有限公司 | 一种基于以太网的单片机程序批量升级方法及系统 |
CN110784386A (zh) * | 2019-09-27 | 2020-02-11 | 深圳市火乐科技发展有限公司 | 固件更新方法及相关设备 |
CN111258616A (zh) * | 2020-01-09 | 2020-06-09 | 深圳市东深电子股份有限公司 | 基于lora通信的水利rtu采集功能升级方法 |
CN111414169A (zh) * | 2020-02-21 | 2020-07-14 | 苏州浪潮智能科技有限公司 | Bmc镜像升级方法及相关组件 |
CN112199101A (zh) * | 2020-09-02 | 2021-01-08 | 福建升腾资讯有限公司 | 一种基于串口的mcu升级方法、系统、设备及介质 |
CN112416392A (zh) * | 2020-11-17 | 2021-02-26 | 四川长虹电器股份有限公司 | 一种基于端云的终端固件动态加载方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204899A (zh) * | 2015-09-17 | 2015-12-30 | 浪潮软件集团有限公司 | 一种基于网络的单片机固件升级方法的实现 |
CN105487909A (zh) * | 2016-01-14 | 2016-04-13 | 江苏林洋能源股份有限公司 | 一种减少电力设备固件升级量的方法 |
CN105528231A (zh) * | 2016-01-21 | 2016-04-27 | 华中科技大学 | 一种基于中间辅助函数的软件动态升级方法及系统 |
CN106293784A (zh) * | 2015-05-19 | 2017-01-04 | 深圳市阿乐卡科技有限公司 | 一种bin文件分块升级的方法 |
-
2018
- 2018-11-02 CN CN201811303377.9A patent/CN109445823A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293784A (zh) * | 2015-05-19 | 2017-01-04 | 深圳市阿乐卡科技有限公司 | 一种bin文件分块升级的方法 |
CN105204899A (zh) * | 2015-09-17 | 2015-12-30 | 浪潮软件集团有限公司 | 一种基于网络的单片机固件升级方法的实现 |
CN105487909A (zh) * | 2016-01-14 | 2016-04-13 | 江苏林洋能源股份有限公司 | 一种减少电力设备固件升级量的方法 |
CN105528231A (zh) * | 2016-01-21 | 2016-04-27 | 华中科技大学 | 一种基于中间辅助函数的软件动态升级方法及系统 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262817A (zh) * | 2019-05-17 | 2019-09-20 | 福建星云电子股份有限公司 | 一种基于以太网的单片机程序批量升级方法及系统 |
CN110262817B (zh) * | 2019-05-17 | 2023-02-28 | 福建星云电子股份有限公司 | 一种基于以太网的单片机程序批量升级方法及系统 |
CN110784386A (zh) * | 2019-09-27 | 2020-02-11 | 深圳市火乐科技发展有限公司 | 固件更新方法及相关设备 |
CN110784386B (zh) * | 2019-09-27 | 2021-12-07 | 深圳市火乐科技发展有限公司 | 固件更新方法及相关设备 |
CN111258616A (zh) * | 2020-01-09 | 2020-06-09 | 深圳市东深电子股份有限公司 | 基于lora通信的水利rtu采集功能升级方法 |
CN111258616B (zh) * | 2020-01-09 | 2023-09-08 | 深圳市东深电子股份有限公司 | 基于lora通信的水利rtu采集功能升级方法 |
CN111414169A (zh) * | 2020-02-21 | 2020-07-14 | 苏州浪潮智能科技有限公司 | Bmc镜像升级方法及相关组件 |
CN112199101A (zh) * | 2020-09-02 | 2021-01-08 | 福建升腾资讯有限公司 | 一种基于串口的mcu升级方法、系统、设备及介质 |
CN112416392A (zh) * | 2020-11-17 | 2021-02-26 | 四川长虹电器股份有限公司 | 一种基于端云的终端固件动态加载方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109445823A (zh) | 一种mcu固件快速升级方法 | |
US20190370011A1 (en) | Computing device | |
WO2016165597A1 (zh) | 数据存储的处理方法及装置 | |
CN106020905B (zh) | 一种微控制器固件开发与更新的方法及系统 | |
CN102662749A (zh) | 一种双Boot切换的实现方法及装置 | |
WO2018040270A1 (zh) | 在Windows系统中加载Linux系统ELF文件的方法及装置 | |
US9569234B2 (en) | Dynamic bit-width modification of internal pointers of a virtual machine | |
CN105718281A (zh) | 一种触摸屏固件升级方法及装置 | |
WO2016078263A1 (zh) | 升级控制设备、终端、终端升级方法及系统、存储介质 | |
CN112306540A (zh) | 一种多工程独立编译方法、系统、终端及介质 | |
CN113741944A (zh) | 一种具备升级功能的机器程序系统及升级方法与应用 | |
CN110569040A (zh) | 一种在嵌入式系统内安装、运行应用程序的方法 | |
CN101872306A (zh) | 一种实现软件更新和软件备份的嵌入式系统及其实现方法 | |
KR20090055074A (ko) | 이동통신단말기의 트랜잭션 단위 펌웨어 업그레이드 방법및 이를 이용한 펌웨어 업그레이드 시스템 | |
US20040255283A1 (en) | Adaptively storing system code in non-volatile storage | |
CN109710297B (zh) | 一种设备整体或分模块进行升级和回退方法 | |
CN103392174B (zh) | 基于闪存存储的系统、分区方法和装置 | |
CN105045718A (zh) | 基于Linux嵌入式系统的调试系统、方法及修改方法 | |
CN104714792A (zh) | 多进程共享数据处理方法和装置 | |
WO2017202128A1 (zh) | 非linux系统软件boot参数传递方法及系统 | |
CN105204896A (zh) | 一种数字存储示波器的BootLoader设计方法 | |
CN111694580B (zh) | 存储设备升级及初始化的方法、装置、电子设备 | |
US9495146B2 (en) | Host and method of upgrading connection manager of dongles | |
US11422823B2 (en) | Starting method for multi-mode IoT device, multi-mode IoT device, and storage medium | |
CN110908706A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190308 |
|
RJ01 | Rejection of invention patent application after publication |