Air系列模块Lua版本nvm功能汇总
Air系列模块Lua版本nvm功能汇总
- nvm
- 参数存储
一、概述
nvm是利用文件实现的一种非易失性参数存储管理模块,掉电后参数不会丢失,典型的应用场景为:小数据量的简单键值对参数。不适合大容量数据的存储管理,如果数据量超过10K,建议直接使用io接口操作文件来管理
nvm功能模块中,涉及到两个文件和一个表
两个文件包括“默认配置文件”和“实时参数文件”,下文用config.lua来表示默认配置文件,para.lua来表示实时参数文件:
Ø config.lua:本地烧录程序时,烧录进模块的一个用户自定义文件,定义了默认的键值对参数结构和内容,例如下图
module(...) strPara = "str1" numPara = 1 boolPara = false tablePara = {"item1-1","item1-2","item1-3"} |
Ø para.lua:每次开机初始化时,如果para.lua不存在,则从config.lua复制出一个文件,重命名为para.lua,在程序运行过程中,写参数都是操作这个para.lua
一个表指的是:para.lua的内存加载表,下文用para_ram_table来表示这个表,每次开机初始化时,会把para.lua文件中的内容加载到para_ram_table,在程序运行过程中,读参数都是直接读取para_ram_table
二、接口实现原理
2.1、初始化
调用nvm.init("config.lua"),执行的流程图如下:
2.2、读参数
调用nvm.get(...)或者nvm.gett(...),直接返回para_ram_table中的参数值
2.3、写参数
调用nvm.set(...)或者nvm.sett(...),执行的流程图如下:
2.4、恢复出厂设置
调用nvm.restore(),执行的流程如下:
1、删除para.lua
2、复制config.lua,重命名为para.lua
3、para.lua文件中的内容加载到内存para_ram_table中
2.5、删除参数文件
调用nvm.remove(),会删除para.lua, 然后用户自行控制重启,重启后自动执行初始化流程
三、常见问题
3.1、api文档和demo在哪里
api文档详见脚本发布包中:script_LuaTask\doc\lib\index.html modules--->nvm
demo参考脚本发布包中:script_LuaTask\demo\nvm
3.2、nvm适用于什么场景
nvm每次更新参数,保存到参数文件中时,会把所有参数拼接在一起,然后执行一次全量写文件的动作;此拼接操作消耗内存较多,如果数据量很大,需要的内存就很大,在系统可用内存紧张的情况下,很容易出现内存不足,从而导致参数更新失败,严重情况下还会造成系统重启
所以说:nvm仅适用于小数据量的简单键值对参数;不适用于大容量数据的存储管理,如果数据量超过10KB【仅仅为经验值,实际能够存储的数据量和系统运行过程中的动态可用内存有关:可用内存越小,允许存储的数据量就越少;可用内存越大,允许存储的数据量就越多,但是也不建议超过10KB】,建议参考fs的demo直接使用io接口操作文件来管理
3.3、远程升级后,para.lua会被自动删除吗
不会自动删除
如果需要删除,在升级包下载成功,软件重启之前,主动调用nvm.remove()接口来删除para.lua,重启应用新版本后,para.lua就是新版本config.lua的复制文件了
3.4、本地烧录后,para.lua会被自动删除吗
本地烧录程序,会格式化文件系统,para.lua属于文件系统中的一个文件,所以会被自动删除
如果参数需要不受本地烧录的影响,可以保存到模块的sn区,sn区最多可存储64字节的数据,在脚本中使用misc.getSn()和misc.setSn(...)可以读写sn区域的数据
3.5、2G模块使用远程升级时,config.lua的注意事项
Ø 不要删除旧版本的任何参数
Ø 不同版本中,同名参数的参数值数据类型要保持一致
Ø 如果有必要,增加新的参数用于新的功能
这样做的原因是:2G远程升级后,存在版本回退的概率(参考),但是版本回退并不会自动删除para.lua,回退到旧版本后,如果参数数值类型发生了改变,或者参数不见了(实际上也是数值类型变成了nil),旧版本的代码如果写的不够健壮,很容易引发代码运行异常。例如:
1.0.0版本的para.lua中有一个keyPara = 1,远程升级到1.0.1版本后,keyPara的数据类型被定义成了string类型,1.0.1版本运行出错,导致版本自动回退到1.0.0,1.0.0的脚本直接对keyPara的值进行数学运算,就会导致运行异常
3.6、nvm操作过程中,掉电会丢失数据吗
nvm有备份机制,如果掉电时正在写nvm,可能会造成正在写入的参数数据不生效,但是会恢复为上次写入的数据,不会导致数据内容出错。如果掉电时正在读nvm,不会对参数数据造成任何影响
3.7、nvm可以操作多少次flash
nvm通过文件接口写flash,具有擦写均衡机制
2G模块和4G模的flash可以完全擦写10万次
假设通过rtos.get_fs_free_size()获取到的文件系统剩余空间为512K字节,nvm参数文件总大小为1K字节,则写512次可以完全擦写一次文件系统剩余空间。总得允许擦写次数理论值就是512*10万次
Air系列模块Lua版本nvm功能汇总相关推荐
- Air系列模块驱动lcd显示
特别说明:只适用于有spi接口的模块,推荐使用Air202和Air800 1.硬件连线:选择标准SPI协议,对应的LCD与模块之间连线为: Air模块 LCD GND------- 地(GND) SP ...
- 合宙模块LUA相关资料汇总
1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...
- Air系列4G模块AT版本MQTT应用说明
mqtt 4G模块AT版本如何使用MQTT 一.应用概述 4G模块支持MQTT和MQTT SSl协议, MQTT应用的基本流程如下:1.激活PDP(参考:http://ask.openluat.com ...
- 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...
- 5-(基础入门篇)学会刷Wi-Fi模块固件(刷LUA版本固件)
http://www.cnblogs.com/yangfengwu/p/9065559.html 基础教程源码链接请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 https://it ...
- AdminStudio功能模块与版本信息总结
AdminStudio功能模块与版本信息总结 最新版本的AdminStudio 9.5有三个版本:标准版,专业版和企业版: 标准版包括以下功能模块: • Repackager • Distributi ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增模块管理界面导出功能(可按条件导出)...
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增模块管理界面导出功能(可按条件导出) 导出功能在很多应用场景中都需要,RDIFramework.NET V3 ...
- PP模块快速入门之功能简介
R/3 PP MRPII模型 该系统具备的主要功能: * 制定销售计划 * 编制主生产计划 * 生成物料需求计划 * 市场预测 * 生产资源计划 * 能力计划 * 生产活动 ...
- 10个iPad Air常见小问题及解决方法汇总
苹果去年推出的iPad Air采用了全新的窄边框设计,拥有更加轻薄的机身以及强劲的性能,所以仍然是目前世界上最好的10英寸平板电脑.不过,它显然并不完美,一些硬件及软件的小问题经常会给我们带来困扰,所 ...
最新文章
- 一行代码搞定 Python 逐行内存消耗分析
- python2与python3在absolute import的区别
- c++桥接模式bridge
- web前端工程师学习路线指南,完整Web前端学习路线图
- 华为谈“不造车” ,每辆车上赚1万元。王兴:特斯拉终于遇到真正的对手!...
- Date与String之间的转换
- ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
- Minimum edit distance(levenshtein distance)(最小编辑距离)初探
- 图神经网络(二)--GNNs
- Mac卸载比较彻底的软件管理工具:App Cleaner Uninstaller
- 解决word或wps办公软件删除空白页后页面布局变乱问题
- dispatch_group_async
- 数据处理笔记9:缺失值-多变量插补
- ShareX加七牛云免费搭建快速博客图床
- 【MySQL】听柠檬班公开课后,学习笔记及作业(二)
- 2020十大最佳大数据分析工具,果断收藏
- 计算机实验进程管理与虚拟机,虚拟机VMware进程控制实验.docx
- java字符串用0X0F分割_微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java...
- led灯什么牌子的质量好?能够护眼的LED台灯推荐
- 技巧---数学分析1:变换积分次序
热门文章
- 大学一年级计算机培训机构,良好的开端是成功的一半 —— 一年级电脑班家长培训...
- 微信支付-关联商户号申请提交后-解决未授权
- CSS属性Text-indent和text-align
- 【人脸识别】基于模板匹配实现人脸识别附matlab代码和GUI界面
- Chromium GN入门学习(本文参考于谷歌Brett Wilson PPT学习资料及谷歌官网文档)
- gem5中NoC的Garnet2.0
- 学姐叫我看 CSS 新出的容器查询,然后把公共组件重构成响应式的!
- 数据仓库笔记(高质量建模)02——数据规范
- JavaScript全栈学习总规划
- fabric测试网络运行与安装详细步骤