Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
针对nvm demo的特殊说明
nvm
OTA
配置文件
很多开发者并不认真读代码,也不读文档,所以实际操作中会遇到各种问题,反而认为是代码有问题。所以特书此文,以正视听。
对于通信模块的二次开发,flash的读写是一个必不可少的功能。而普通的io操作较为复杂,所以提供了近似ini文件的操作方式,即nvm demo。 但是,**很多开发者并不认真读代码,也不读文档,所以实际操作中会遇到各种问题,反而认为是代码有问题,到处抱怨。所以特书此文,以正视听**。 #初识 首先,看一下config.lua的文件结构: ```lua module(...) --必须!绝对不可删除 --格式为key = value --key需要符合Lua的变量命名规范,即不可数字开头等; --value可以是Boolean、Str、Int、Table,但是不可为空; strPara = "str1" numPara = 1 boolPara = false tablePara = {"item1-1","item1-2","item1-3"} ``` 接下来,我们来看一下nvm的用法。示例代码: ```lua require”nvm” --必须!引用nvm.lua require”config” --必须!保存的文件 nvm.init("config.lua") --必须!初始化并使用config.lua作为配置文件进行读写,任何情况下都不可删除! nvm.get(“test”) --读取config.lua中test的值。config.lua中,”test”对应的key=value 都不可为空,且key不可出现拼写错误 nvm.set(“test”, “abcd”) –设置config.lua中test的值位“abcd” nvm.restore() --将config.lua恢复默认值 ``` 请注意,如果config.lua中,nvm.get请求的key错误或者不存在,则会出现如下提示: ![](/static/editormd/php/../uploads/5_84872.png) #Demo 由于demo的演示不够具体,所以在此给出一个相对完整的代码,帮助开发者更好的了解并运用。代码如下(字符编码为utf-8): ###config.lua ```lua module(...) devStart = false bootNum = 0 ``` > ![](/static/editormd/php/../uploads/5_84508.png) ###main.lua ```lua PROJECT = "NVM" VERSION = "2.0.0" require "sys" require "testNvm" sys.init(0, 0) sys.run() ``` > ![](/static/editormd/php/../uploads/5_60130.png) ###testNvm.lua ```lua module(...,package.seeall) require"config" require"nvm" nvm.init("config.lua") nvm.set("bootNum", nvm.get("bootNum") + 1) --开机次数+1 if nvm.get("devStart") == false then print("第一次上电开机") nvm.set("devStart", true) print("开机信息已经记录,5s后重启") sys.timerStart(rtos.restart, 5000) elseif nvm.get("bootNum") == 2 then print("第二次上电开机") nvm.restore() print("已经恢复出厂设置,5s后重启") sys.timerStart(rtos.restart, 5000) end ``` > ![](/static/editormd/php/../uploads/5_67094.png) Demo的流程是:开机后,修改devStart标识,同时增加开机次数计数。并根据标识符和开机次数判断是恢复出厂设置。 下载到模块运行一下看看效果如何: > ![](/static/editormd/php/../uploads/5_51766.png) 第一次开机,开机次数+1,修改devStart,然后重启; > ![](/static/editormd/php/../uploads/5_39006.png) 第二次开机,开机次数+1,恢复配置文件为默认设置,然后重启; > ![](/static/editormd/php/../uploads/5_69748.png) 第三次开机,因为配置文件已经恢复成默认值,所以和第一次开机无异。 #OTA nvm在初始化config.lua时,自动生成多重备份文件。日常的读取和写入操作,也是对备份文件进行操作,而不涉及config.lua文件本身。所以,即使是读写中,出现意外掉电的情况,也不会影响数据的准确性,更不会出现读写失败的情况。 因此,需要注意的是,远程升级时,升级包的config.lua文件即使已经更新,也不会影响到模块存储的“备份文件”。所以,如果需要启用升级包内新版的config.lua,则需要修改update.lua,在升级包下载成功后,重启前调用nvm.remove(),删掉nvm保存的备份文件。 如此一来,升级重启后的开机过程中,执行nvm.init("config.lua")时,会用新的config.lua文件自动覆盖参数文件,这样就ok了。 有的开发者可能有疑问,如果删掉备份文件,但是新的config.lua都是默认值,保存的参数岂不是都丢失了?这个倒是不用担心,可以把他们保存在模块的sn,它最长支持64字节。sn保存的内容,不受工具下载、远程升级的影响。 如此一来,完整的流程如下: 下载升级包 -> 下载成功 -> 调用misc.setSn(“test”)将现模块的重要参数存储在sn -> 调用 nvm.remove() 删掉备份文件 -> 重启模块 -> 远程升级成功 -> 调用nvm.init(“config.lua) 初始化 -> 调用misc.getSn()读取sn保存的参数 -> 将参数保存在配置文件 -> 走正常开机流程,连接服务器等
发表于 2018-09-26 10:42
阅读 ( 4918 )
分类:
默认分类
0 推荐
打赏
收藏
你可能感兴趣的文章
Air系列模块Lua版本nvm功能汇总
4331 浏览
Air系列模块远程升级功能汇总
6660 浏览
4G模块Lua版本如何使用合宙服务器远程升级
5077 浏览
非官方的自建OTA升级平台(Java版),免费,开源
7797 浏览
相关问题
ota升级删除文件范围
1 回答
阿里云OTA升级中默认的固件版本号格式为:_G.PROJECT.."_".._G.VERSION.."_"..sys.getcorever()中的sys.getcorever()具体指什么?
1 回答
AIR202F的OTA升级,能否既能用Luat物联网平台升级也能用阿里云物联网平台?即同时支持这两者升级模式?
1 回答
注释掉nvm.set之后,为什么获取的值是最初设置的值,而不是8700呢
1 回答
testnvm的demo如何实现直接读取flash
2 回答
OTA升级,现接入私有服务器,通过下发命令到模块(带有需要升级的版本信息),然后模块根据版本信息从平台上去下载对应的下载文件进行升级吗
1 回答
3 条评论
请先
登录
后评论
技术销售Delectate
43 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!