对于嵌入式应用层来说,需要对设备的很多参数进行保存,为了使得这些配置参数掉电不丢失,因此在flash中生成配置文件用于保存设备参数,每当设备重启后,将参数读出,重发给设备。由于生成了可变的配置文件,当我们的设备在后期的维护中总会有新的功能和需求出现,会使得我们的产品不断的更新和迭代,当产品更新的时候,免不了要对我们的配置文件进行操作,用以保证客户的数据在更新成功之后不会丢失,保证数据的安全性。在更新迭代的过程中,我们对配置文件的改动也会碰到许多不同的问题,在此给出程序迭代,配置变更会遇到的几种情况及其解决方案。
版本迭代:指设备新增功能或者同基线代码的不同设备类型之间的维护。
配置文件:指保存设备各种参数的文件,由于是存储在设备的flash中,掉电不丢失,能够保证用户设备的安全性。
配置结构体:指设备启动时,将配置文件中的参数读取到内存中,并能够通过配置结构体访问该设备的所有配置参数。
当产品发生迭代的时候,往往会伴随这功能的新增或者删减,若已发布的版本和现更新的版本之间存在功能的差异,那么对于已发布的设备来说需要升级到最新的程序就不得不考虑配置文件的变动,若客户使用已发布的产品已有很长的时间,那么必然会产生很多数据和用户的偏好设置,在进行版本迭代的同时,我们不仅需要将用户的设备程序升级到最新的程序,还需要保障用户的数据不会被改动。
本文主要介绍设备发送版本迭代和更新的时候会遇到的三种情况,并给出解决方案。
设备启动后,会首先从设备的flash中读取配置文件到内存中,再通过判断配置文件的大小和程序中的存储配置参数的结构体的大小来进行相应的处理措施。具体流程如图1所示:
图1版本升级总流程
在升级过程中,主要会产生问题的地方就在于版本迭代的过程中,需要对设备进行打补丁变更结构体的操作,若不考虑结构体的对齐和变更,直接进行设备升级的话,极有可能导致,设备新的配置文件和老的配置文件对不上,设备在运行过程中,会出现指针或者数组的非法访问以及数据乱码的情况,严重的话甚至会导致设备无法正常启动,因此在变更的过程需要严格把控配置文件的变更,在变更中会遇到如下三种情况。
①:更新后和更新前的配置保持一致,即没有使用了预留字段进行功能补充或没有新增功能。
如图2所示,假设原有配置的大小为100字节,新的配置大小也为100字节,并未有新增功能或者删减功能,进行版本更新的时候,只需将原有配置取出再赋值给新的配置后删除,再将新的配置写回即可。
图2更新前后配置大小一致
②:更新后的配置比更新前的配置大,即一般发生了新功能的增加或者未使用预留字段进行配置扩充而导致的。
图3更新后配置大小一致
如图3所示,原有配置到新的配置,配置结构体大了50字节,在此种情况下需要在升级的过程中保证用户的数据不丢失,则可细分为如下3种情况。
情况一:如图4所示,若新增的配置在原有的配置下面扩充的话,只需将原有的配置取出存于老的配置结构体中,再通过内存拷贝的方式将其拷贝至新的配置结构体对应处,再将新增的配置填充起来后,将原有的配置文件删除,将新生成的配置文件写回到flash中即可。
图4更新后配置比原有配置大(情况一)
情况二:如图5所示,若新增的配置在原有的配置中间,在进行升级迭代的过程中,需要先将原有的配置读取到老的配置结构体中,再将原有配置的未更改的部分依次赋值到对应的新配置的结构体中,再将原有的配置文件删除,将新生成的配置写回即可。
图5更新后配置比原有配置大(情况二)
情况三:如图6所示,新增的配置和原有的配置相互独立,不存在内部冲突,则采用和情况一类似的处理办法,只需将原有的配置取出存于老的配置结构体中,再通过内存拷贝的方式将其拷贝至新的配置结构体对应处,再将新增的配置填充起来后,将原有的配置文件删除,将新生成的配置文件写回到flash中即可。
图6更新后配置比原有配置大(情况三)
③:更新后的配置比更新前的配置小,即一般发生了版本回溯导致的新增功能被删减,新增的配置移除。
如图7,图8,图9所示,新的配置为原有配置的一部分,在进行版本回溯的过程中,也分为三种情况,但是对于版本回溯的三种情况的分解处理方法一致,需要将原有的配置取出,再将对应的配置结构体进行赋值,赋值完成后将原有的配置文件删除,最后将新的配置写回即可。
图7更新后配置比原有配置小(情况一)
图8更新后配置比原有配置小(情况二)
图9更新后配置比原有配置小(情况三)
④:特别注意对于OSD文件的变更。
由于配置文件和OSD的配置文件是相互独立的,在进行配置删除的时候,需要将OSD配置文件也要同步删除,在进行版本迭代的过程中,若需要将原有的配置文件完全删除,再重新写回的方式进行配置的更新的话,则需要在删除前提前备份OSD的参数文件,待重新写回后能确保用户的OSD配置参数不丢失。
对于设备程序的版本迭代,分为三种大类:①配置未发生变更;②配置文件变大;③配置文件变小。
针对于②③两种情况又细分为三种小类,配置文件变更前后所改动的结构体部分对比原配置文件结构体的相对位置不一样,则需要进行区别处理,用以保障用户在进行设备程序升级迭代的时候,不会导致原有用户的数据丢失或者设备异常的问题。
本文档详细介绍了在进行设备版本迭代的过程中会遇到几种配置文件和配置结构体异常的情况及其处理方案,对此类问题有较好的指导作用。