一种嵌入式程序在线更新方法与流程

文档序号:23901818发布日期:2021-02-09 13:48阅读:56来源:国知局
一种嵌入式程序在线更新方法与流程

[0001]
本发明属于嵌入式计算机技术领域,涉及一种安全可靠的嵌入式程序在线更新方法。


背景技术:

[0002]
嵌入式设备软件在线更新,需要通过外部接口接收新版本的程序,然后将新版本的程序写入flash,替换旧版本的程序。传统方法如图1所示,flash中存储的程序被引导到ram,ram加载完成后执行程序的代码段。程序收到在线更新请求时,会改写flash中存储的程序。首先将flash存储区中的旧程序擦除,然后将新版本的程序写入原先的存储区。改写flash的过程耗时较长,一旦出现设备断电或者flash改写失败的情况,旧版本程序被擦除的同时,新版本的程序也未能完全写入flash。这样一来,造成了下一次设备启动时,新版本不完整的程序被加载到ram。不仅不能实现程序的应用功能,而且在线更新的功能也无法使用,只能通过被迫拆卸设备外壳的手段,手动连接编程器更新程序,造成时间上的损失以及操作繁琐的问题。


技术实现要素:

[0003]
(一)发明目的
[0004]
针对嵌入式程序在线更新的需求,设计一种安全可靠的嵌入式程序在线更新方法。
[0005]
(二)技术方案
[0006]
为了解决上述技术问题,本发明提供一种安全可靠的嵌入式程序在线更新方法,嵌入式程序在线更新方法,更新过程为:对flash程序存储区进行a、b分区,实现flash中引导程序区域与改写程序区域的分离,引导程序区域负责将程序boot到ram运行程序区中运行,在ram运行程序区中运行的程序将更新的代码写入改写程序区域;在线更新成功后,通过交换引导程序区域基地址与改写程序区域基地址,实现flash中引导程序区域与改写程序区域的交换。
[0007]
优选地,将flash存储程序a区作为引导程序区,flash存储程序b区作为改写程序区,默认引导地址为a区基地址,默认改写地址为b区基地址;程序更新的步骤为:
[0008]
步骤一引导
[0009]
设备启动后,在a区中存储的旧程序版本被系统的引导程序加载到ram运行程序区;加载完成后,旧程序在ram运行程序区中运行,执行应用功能并等待外部的在线更新命令;
[0010]
步骤二改写
[0011]
在ram运行程序区中运行的旧程序收到在线更新命令后,接收外部传输的新程序版本;接收完成后,对flash存储程序b区进行擦除操作;擦除完成后,将新程序写入flash存储程序b区;
[0012]
步骤三切换
[0013]
将b区的基地址设置为引导地址,a区的基地址设置为改写地址;设备下一次启动时,重复执行步骤一、二、三。
[0014]
(三)有益效果
[0015]
上述技术方案所提供的安全可靠的嵌入式程序在线更新方法,采用flash分区存储和引导的程序加载方式,即使更新过程被打断,也能保护程序不被破坏,下一次启动时程序仍然能够执行在线更新操作,全面提升了设备的安全性和可靠性。
附图说明
[0016]
图1是传统程序在线更新方式框图。
[0017]
图2是存储a区程序更新存储b区程序的框图。
[0018]
图3是存储b区程序更新存储a区程序的框图。
具体实施方式
[0019]
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0020]
考虑到连接编程器更新程序需要事先拆卸产品外壳,操作不便且效率低下,嵌入式程序的更新方式一般为在线更新。在嵌入式程序在线更新的过程中,一旦断电或设备出现异常,flash中的程序会被破坏,影响程序自身功能的实现,而且下一次启动时程序便不能再次执行在线更新操作。本方法采用flash分区存储和引导的程序加载方式,即使更新过程被打断,也能保护程序不被破坏,下一次启动时程序仍然能够执行在线更新操作,全面提升了设备的安全性和可靠性。
[0021]
参照图2和图3所示,首先,本发明提供一种嵌入式程序在线更新系统,包括flash程序存储区和ram运行程序区,flash程序存储区分为a区和b区两个区域,其中一个区域作为引导程序区域,另一个区域作为改写程序区域,引导程序区域负责将程序boot到ram运行程序区中运行,在ram运行程序区中运行的程序将更新的代码写入改写程序区域。
[0022]
其中,a区作为引导程序区域,b区作为改写程序区域时,引导地址为a区基地址,改写地址为b区基地址;程序在线更新成功后,交换引导程序区域基地址与改写程序区域基地址,实现flash中引导程序区域与改写程序区域的交换。
[0023]
b区作为引导程序区域,a区作为改写程序区域时,引导地址为b区基地址,改写地址为a区基地址;程序在线更新成功后,交换引导程序区域基地址与改写程序区域基地址,实现flash中引导程序区域与改写程序区域的交换。
[0024]
本发明通过对flash程序存储区进行a/b分区,实现flash中引导程序区域与改写程序区域的分离。引导程序区域负责将程序boot到ram中运行,在ram中运行的程序会将更新的代码写入改写程序区域。在更新过程中,断电或flash异常仅会影响改写程序区域。设备下一次启动后,引导程序仍然可以被加载到ram中正常执行应用功能或者更新功能。在线更新成功后,通过交换引导程序区域基地址与改写程序区域基地址,实现flash中引导程序区域与改写程序区域的交换。设备下一次启动时,会默认加载新版本的程序,从而完成嵌入式软件的版本升级。
[0025]
在嵌入式设备中,flash是程序存储的载体,ram的是程序运行的载体。如图2所示,将flash存储程序a区作为引导程序区,flash存储程序b区作为改写程序区。默认引导地址为a区基地址,默认改写地址为b区基地址。
[0026]
具体实施步骤如下:
[0027]
步骤一引导
[0028]
设备启动后,在a区中存储的旧程序1.0版本会被系统的引导程序加载到ram。加载完成后,旧程序在ram中运行,执行应用功能并等待外部的在线更新命令。
[0029]
步骤二改写
[0030]
在ram中运行的旧程序收到在线更新命令后,接收外部传输的新程序2.0版本。接收完成后,对flash存储程序b区进行擦除操作。擦除完成后,将新程序写入flash存储程序b区。在写入的过程中,一旦出现设备断电或者新程序写入flash失败。在设备下一次启动时,重复执行步骤一,旧程序会被加载,可以重新进行在线更新。
[0031]
步骤三切换
[0032]
如果在步骤二中新程序成功被写入了flash存储程序b区,则将b区的基地址设置为引导地址,a区的基地址设置为改写地址。如图3所示,设备下一次启动时,会重复执行步骤一、二、三。区别在于,由于a/b区引导地址与改写地址的切换,在线更新后存储在b区的2.0版本程序会被加载到ram中运行,下一次的更新会擦除a区并将更新版本的3.0版本程序写入a区。
[0033]
循环交替更新a/b区,保证了旧版本的程序在更新的过程中不被破坏,避免了因更新中途失败导致的拆卸设备的风险,提升了程序在线更新的安全性和可靠性。
[0034]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1