本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。
先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获
我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考!
NVS: Non-volatile storage , 即将数据存储到 flash 中, 掉电或重启后数据仍然存在, flash 类似于 PC 上磁盘。
Air720SL 上提供 nvs 接口给用户, 来保存和读取用户数据. 具体参考 nvm.lua,本接口不适合大容量数据的存储管理,如果数据量超过10K,建议直接使用io接口操作文件来管理。
擦写均衡, 使 flash 寿命更长
NVS 在操作少量数据上, NVS 分区更大时, 擦写均衡表现的更为明显.。
例如: flash 一个 sector 为 4KB, NVS 分配大小为一个 sector, 写同一个 64 Bytes 数据到 flash, 分别比较spi_flash_xxx 和 nvs 写 64 次。
以上内容引用espressif的ESP8266/ESP32 NVS 基本操作有兴趣的自行了解
config.lua
文件进行数据初始化的,这个文件只在第一次运行时有效,需要提前把要存储的键值对放进去才能使用,不能在程序随意添加其他的键值对,只能修改文件中提前写好的注意:重新下载会清空数据存储区,旧数据会被清空
module(...)
strPara = "str1"
numPara = 1
boolPara = false
tablePara = {"item1-1","item1-2","item1-3"}
nvs在luat中封装的很简单,几乎可以认为是无脑,对着例程看一下就知道怎么用,一共就涉及到了三个函数,分别是
完整的测试代码如下,测试代码中分别对string类型、numble类型、bool类型、table类型进行了设置和读取。
--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "LED"
VERSION = "0.0.1"
require "sys"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
require "config"
require "nvm"
local function Test_Task()
while true do
log.info("Test_Task_run")
local num = nvm.get("numPara")
num = num + 1
nvm.set("numPara", num)
log.info("numPara",num)
sys.wait(2000)
end
end
local function user_main()
sys.wait(10000)
nvm.init("config.lua")
nvm.set("strPara", "str2")
nvm.set("boolPara", false)
nvm.set("tablePara", {"item2-1", "item2-2", "item2-3"})
log.info("testNvm.strPara", nvm.get("strPara"))
log.info("testNvm.boolPara", nvm.get("boolPara"))
local tableValue = nvm.get("tablePara")
log.info("testNvm.tablePara", tableValue[1], tableValue[2], tableValue[3])
sys.taskInit(Test_Task)
end
--启动系统框架
sys.taskInit(user_main)
sys.init(0, 0)
sys.run()
下载时要注意的是必须带上config.lua
才能正常使用
下载完成打开监视端口,读写正常
[2020-04-02 21:51:31.742] [I]-[nvm.set] true strPara str2 nil nil
[2020-04-02 21:51:31.753] [I]-[nvm.set] false boolPara false nil nil
[2020-04-02 21:51:31.757] [I]-[nvm.set] true tablePara table: 06fc3358 nil nil
[2020-04-02 21:51:31.768] [I]-[testNvm.strPara] str2
[2020-04-02 21:51:31.772] [I]-[testNvm.boolPara] false
[2020-04-02 21:51:31.782] [I]-[testNvm.tablePara] item2-1 item2-2 item2-3
[2020-04-02 21:51:31.788] [I]-[Test_Task_run]
[2020-04-02 21:51:31.792] [I]-[nvm.set] true numPara 2 nil nil
[2020-04-02 21:51:31.971] [I]-[numPara] 2
[2020-04-02 21:51:33.943] [I]-[Test_Task_run]
[2020-04-02 21:51:33.947] [I]-[nvm.set] true numPara 3 nil nil
[2020-04-02 21:51:33.953] [I]-[numPara] 3
[2020-04-02 21:51:35.960] [I]-[Test_Task_run]
[2020-04-02 21:51:35.973] [I]-[nvm.set] true numPara 4 nil nil
[2020-04-02 21:51:35.993] [I]-[numPara] 4
[2020-04-02 21:51:37.955] [I]-[Test_Task_run]
[2020-04-02 21:51:37.959] [I]-[nvm.set] true numPara 5 nil nil
不会下载的点击这里,进去查看我的第二篇博文
2、Air720SL模块Luat开发:第一个Luat的Hello World
里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!