Air系列模块Lua版本nvm功能汇总

  • 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.1api文档和demo在哪里

api文档详见脚本发布包中:script_LuaTask\doc\lib\index.html        modules--->nvm

demo参考脚本发布包中:script_LuaTask\demo\nvm

3.2nvm适用于什么场景

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.52G模块使用远程升级时,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.6nvm操作过程中,掉电会丢失数据吗

nvm有备份机制,如果掉电时正在写nvm,可能会造成正在写入的参数数据不生效,但是会恢复为上次写入的数据,不会导致数据内容出错。如果掉电时正在读nvm,不会对参数数据造成任何影响

3.7nvm可以操作多少次flash

nvm通过文件接口写flash,具有擦写均衡机制

2G模块和4G模的flash可以完全擦写10万次

假设通过rtos.get_fs_free_size()获取到的文件系统剩余空间为512K字节,nvm参数文件总大小为1K字节,则写512次可以完全擦写一次文件系统剩余空间。总得允许擦写次数理论值就是512*10万次

Air系列模块Lua版本nvm功能汇总相关推荐

  1. Air系列模块驱动lcd显示

    特别说明:只适用于有spi接口的模块,推荐使用Air202和Air800 1.硬件连线:选择标准SPI协议,对应的LCD与模块之间连线为: Air模块 LCD GND------- 地(GND) SP ...

  2. 合宙模块LUA相关资料汇总

    1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...

  3. Air系列4G模块AT版本MQTT应用说明

    mqtt 4G模块AT版本如何使用MQTT 一.应用概述 4G模块支持MQTT和MQTT SSl协议, MQTT应用的基本流程如下:1.激活PDP(参考:http://ask.openluat.com ...

  4. 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  5. 5-(基础入门篇)学会刷Wi-Fi模块固件(刷LUA版本固件)

    http://www.cnblogs.com/yangfengwu/p/9065559.html 基础教程源码链接请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 https://it ...

  6. AdminStudio功能模块与版本信息总结

    AdminStudio功能模块与版本信息总结 最新版本的AdminStudio 9.5有三个版本:标准版,专业版和企业版: 标准版包括以下功能模块: • Repackager • Distributi ...

  7. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增模块管理界面导出功能(可按条件导出)...

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增模块管理界面导出功能(可按条件导出) 导出功能在很多应用场景中都需要,RDIFramework.NET V3 ...

  8. PP模块快速入门之功能简介

    R/3 PP MRPII模型 该系统具备的主要功能:   * 制定销售计划   * 编制主生产计划   * 生成物料需求计划   * 市场预测   * 生产资源计划   * 能力计划   * 生产活动 ...

  9. 10个iPad Air常见小问题及解决方法汇总

    苹果去年推出的iPad Air采用了全新的窄边框设计,拥有更加轻薄的机身以及强劲的性能,所以仍然是目前世界上最好的10英寸平板电脑.不过,它显然并不完美,一些硬件及软件的小问题经常会给我们带来困扰,所 ...

最新文章

  1. 一行代码搞定 Python 逐行内存消耗分析
  2. python2与python3在absolute import的区别
  3. c++桥接模式bridge
  4. web前端工程师学习路线指南,完整Web前端学习路线图
  5. 华为谈“不造车” ,每辆车上赚1万元。王兴:特斯拉终于遇到真正的对手!...
  6. Date与String之间的转换
  7. ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
  8. Minimum edit distance(levenshtein distance)(最小编辑距离)初探
  9. 图神经网络(二)--GNNs
  10. Mac卸载比较彻底的软件管理工具:App Cleaner Uninstaller
  11. 解决word或wps办公软件删除空白页后页面布局变乱问题
  12. dispatch_group_async
  13. 数据处理笔记9:缺失值-多变量插补
  14. ShareX加七牛云免费搭建快速博客图床
  15. 【MySQL】听柠檬班公开课后,学习笔记及作业(二)
  16. 2020十大最佳大数据分析工具,果断收藏
  17. 计算机实验进程管理与虚拟机,虚拟机VMware进程控制实验.docx
  18. java字符串用0X0F分割_微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java...
  19. led灯什么牌子的质量好?能够护眼的LED台灯推荐
  20. 技巧---数学分析1:变换积分次序

热门文章

  1. 大学一年级计算机培训机构,良好的开端是成功的一半 —— 一年级电脑班家长培训...
  2. 微信支付-关联商户号申请提交后-解决未授权
  3. CSS属性Text-indent和text-align
  4. 【人脸识别】基于模板匹配实现人脸识别附matlab代码和GUI界面
  5. Chromium GN入门学习(本文参考于谷歌Brett Wilson PPT学习资料及谷歌官网文档)
  6. gem5中NoC的Garnet2.0
  7. 学姐叫我看 CSS 新出的容器查询,然后把公共组件重构成响应式的!
  8. 数据仓库笔记(高质量建模)02——数据规范
  9. JavaScript全栈学习总规划
  10. fabric测试网络运行与安装详细步骤