本文来源电子发烧友社区,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2282703_1_1.html
Air105使用的是openluat,给我们提供了非常丰富的文件操作功能,今天我们就一次搞清楚基础的文件操作方式。
一、文件系统
openluat上的文件系统,分为如下几种:
注意,luadb下的文件,是只读的。
openluat中的文件操作对象,可以使用内置的Flash,也可以使用SPI Flash,还可以使用SD卡,本文的演示,使用的是内置的Flash。
二、文件操作方式
当前支持的常用文件操作方式,则分为如下几种:
三、io文件操作
io文件操作,是最基础的文件操作方式。
io文件操作的基本指令如下:
1. 打开文件:如果打开失败,则f为空
复制代码
可供使用的标志位如下:
通常使用中:
如果要打开文件读取数据,则标志位使用r或者rb;
如果要打开文件写入数据,则标志位使用w或者wb,注意会清空文件
如果要打开文件追加数据,则标志位使用a或者ab
2. 读取数据:
复制代码
3. 写入数据:
复制代码
注意写入文件的时候,写入的是字符串。而读取的时候,再根据实际情况进行解析。
4. 关闭文件:
复制代码
文件操作部分的实例,可以查看Air105的demo中的fs/Air105/main.lua:
复制代码
四、nvm操作
openluat的nvm操作,实际上是对io操作的一个特殊封装。
通常于存储配置,因为其数据存储必须是一个lua配置文件,样例如下:
复制代码
这样的一个配置文件,是可以在lua脚本中,直接require的。
如果要读取值,则使用nvm.get("a")
如果要设置值,则使用nvm.set('a',1)
需要注意的是,只能操作config.lua中存在的key,否则出错。存在的key,其对应的value也不能为空,否则也会出错。
务必要提醒的是,因为每次修改后,都会整个配置数据一起保存,所以只适合较少配置数据的情况,不适合较多数据的设置读取。数据较多的情况,可以直接使用io文件操作。
nvm的具体操作,可以查看Air105的demo中的nvm/main.lua:
复制代码
需要注意的是,nvm.set(),默认的配置文件config.lua的内容,是不会发生变化的,需要用nvm.get()才能得到最新的值。
其具体处理的实际逻辑,可以查看nvm/nvm.lua了解;其中确保了即使断电,也不会造成配置数据丢失的逻辑。
五、fdb数据操作
openluat的还提供了一个简单的kv操作库fdb,可通过fdb.kv_ge和tfdb.kv_set来进行读写。
如果熟悉memcached或者redis的同学,对这个操作就会比较熟悉。
fdb存储的数据,刷机的时候,也不会丢失,除非主动删除对应的key。
fdb的主要操作指令如下:
复制代码
使用fdb.kv_set的时候,可以写入不同类型的数据,读取的时候,也会保持类型。
需要注意的是,fdb存储的数据,也不能使用空值。但读取不存在的key,则返回空值。
fdb基于flashdb实现的,具体实现逻辑,可以查看:https://gitee.com/openLuat/LuatOS/tree/master/components/flashdb/
fdb的具体操作,可以查看Air105的demo中的fdb/main.lua:
复制代码
总的来说,通常的文件操作,使用io文件操作,配置类的数据,使用nvm操作,而kv数据的存储,可以使用fdb。
例如:
如果需要存储图片等数据,或者读取文件内容进行分析之类的,可以用io文件操作。
如果是可以被用户修改的配置,可以用nvm操作。
如果是一个类似sn之类的数据,则可以考虑使用fdb。
Air105使用的是openluat,给我们提供了非常丰富的文件操作功能,今天我们就一次搞清楚基础的文件操作方式。
一、文件系统
openluat上的文件系统,分为如下几种:
注意,luadb下的文件,是只读的。
openluat中的文件操作对象,可以使用内置的Flash,也可以使用SPI Flash,还可以使用SD卡,本文的演示,使用的是内置的Flash。
二、文件操作方式
当前支持的常用文件操作方式,则分为如下几种:
- io:普通io方式操作文件
- nvm:ini方式操作的lua配置文件
- fdb:kv方式操作数据,刷机也不会清除
三、io文件操作
io文件操作,是最基础的文件操作方式。
io文件操作的基本指令如下:
1. 打开文件:如果打开失败,则f为空
- local f = io.open("/文件名", "标志位")
可供使用的标志位如下:
通常使用中:
如果要打开文件读取数据,则标志位使用r或者rb;
如果要打开文件写入数据,则标志位使用w或者wb,注意会清空文件
如果要打开文件追加数据,则标志位使用a或者ab
2. 读取数据:
- -- 读取首行
3. 写入数据:
- f:write(tostring(data))
注意写入文件的时候,写入的是字符串。而读取的时候,再根据实际情况进行解析。
4. 关闭文件:
- f:close()
文件操作部分的实例,可以查看Air105的demo中的fs/Air105/main.lua:
四、nvm操作
openluat的nvm操作,实际上是对io操作的一个特殊封装。
通常于存储配置,因为其数据存储必须是一个lua配置文件,样例如下:
- --存储默认数据
- --必须return一个table
- return {
- a=1,
- b=2
- }
这样的一个配置文件,是可以在lua脚本中,直接require的。
如果要读取值,则使用nvm.get("a")
如果要设置值,则使用nvm.set('a',1)
需要注意的是,只能操作config.lua中存在的key,否则出错。存在的key,其对应的value也不能为空,否则也会出错。
务必要提醒的是,因为每次修改后,都会整个配置数据一起保存,所以只适合较少配置数据的情况,不适合较多数据的设置读取。数据较多的情况,可以直接使用io文件操作。
nvm的具体操作,可以查看Air105的demo中的nvm/main.lua:
-
-- LuaTools需要PROJECT和VERSION这两个信息
需要注意的是,nvm.set(),默认的配置文件config.lua的内容,是不会发生变化的,需要用nvm.get()才能得到最新的值。
其具体处理的实际逻辑,可以查看nvm/nvm.lua了解;其中确保了即使断电,也不会造成配置数据丢失的逻辑。
五、fdb数据操作
openluat的还提供了一个简单的kv操作库fdb,可通过fdb.kv_ge和tfdb.kv_set来进行读写。
如果熟悉memcached或者redis的同学,对这个操作就会比较熟悉。
fdb存储的数据,刷机的时候,也不会丢失,除非主动删除对应的key。
fdb的主要操作指令如下:
- -- 初始化
使用fdb.kv_set的时候,可以写入不同类型的数据,读取的时候,也会保持类型。
需要注意的是,fdb存储的数据,也不能使用空值。但读取不存在的key,则返回空值。
fdb基于flashdb实现的,具体实现逻辑,可以查看:https://gitee.com/openLuat/LuatOS/tree/master/components/flashdb/
fdb的具体操作,可以查看Air105的demo中的fdb/main.lua:
-
-- LuaTools需要PROJECT和VERSION这两个信息
总的来说,通常的文件操作,使用io文件操作,配置类的数据,使用nvm操作,而kv数据的存储,可以使用fdb。
例如:
如果需要存储图片等数据,或者读取文件内容进行分析之类的,可以用io文件操作。
如果是可以被用户修改的配置,可以用nvm操作。
如果是一个类似sn之类的数据,则可以考虑使用fdb。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
开发板
+关注
关注
25文章
4429浏览量
93993 -
合宙通信
+关注
关注
0文章
120浏览量
1498 -
Air105
+关注
关注
0文章
48浏览量
263
发布评论请先 登录
相关推荐
芯圣SDK工具,让开发更方便——SDK-HC89S105A
SDK-HC89S105A是基于HC89S105A设计的快速开发工具。SDK-HC89S105A由HC89S105A微控制器的主控板和HC-
基于合宙Air001的迷你RGB灯环
问题来了,你会亲手做来送给最爱的TA吗?基于合宙Air001的迷你RGB灯环-开源分享-本项目以合宙Air001系列MCU为主控芯片,使用KeilMDK开发,实现按
【LuckFox Pico Plus开发板免费试用】使用ADB命令访问开发板
感谢电子发烧友和幸狐科技提供了此次LuckFox Pico Plus开发板试用机会。
LuckFox Pico 是一款基于瑞芯微 RV1103 芯片具有高性价比的微型 Linux 开发板
发表于 10-14 09:42
合宙Air001创意DIY——自制炫酷“地球名片”
合宙Air001开发板近期火爆出圈,那么超值套餐里的Air001芯片可以做什么呢?今天特别分享@灰太狼烤着吃大佬开源新作:地球名片——基于合宙Air001芯片,以地球为主题设计的一款具
合宙Air001在Arduino下的测试IIC工程
本帖最后由 大懒猫54 于 2023-8-23 11:57 编辑
测试使用合宙Air001开发板,使用PF0,PF1对应的IIC接口,测试0.96英寸的OLED。下载器使用
发表于 08-23 11:56
kcu105开发板配置flashxip模式,未能识别flash device怎么解决?
系统:win10_64
IDE版本:2022.01
开发板:kcu105
问题:外接qspi flash,进行qspi测试。配置flashxip模式,未能识别flash device(ps:ilm测试正常)。报错如下:
发表于 08-12 06:46
合宙Air001开发板——支持Arduino开发,国产MCU新热潮
包装炸裂、价格便宜、支持Arduino开发——点燃国产MCU新热潮的合宙Air001,开发板补货终于到了!!!合宙Air001开发板、芯片、
补货到!合宙Air001开发板——支持Arduino开发,国产MCU新热潮
包装炸裂、价格便宜、支持Arduino开发 ——点燃国产MCU新热潮的合宙Air001,开发板补货终于到了!!! 合宙Air001开发板、芯
专为成本敏感用户打造——合宙Air001国产MCU芯片量产发售
上周发布的合宙Air001开发板已有很多朋友收到了,大家满怀热情研究Air001开发板如何使用的同时,也很关心芯片的价格——现公开零售价为0.76元一片,10片起售包邮;批量价更优,欢
国产MCU有多卷——合宙Air001开发板新品上市,羊毛芯片只要0.01元?!
国产MCU有多卷?硬件资源要扛打,软件开发要便捷,到手价格要实惠——那么,不要错过合宙Air001系列!1合宙Air001简介Air001——合宙出品的TSSOP20封装国产MCU,采
国产MCU有多卷——合宙Air001开发板新品上市,羊毛芯片只要0.01元?!
可通过 air001.cn ,获取Air001芯片/开发板相关教程、原理图及使用手册等最新开发资料。 Air001芯片特性 采用ARM 3
合宙新品开发板排队来~Air001、Air601、树莓派,哪款你更期待
用代码写诗,用PCB作画看松香袅袅,听同频心跳……如果你也一样热爱那么在时间的光影里共同书写属于我们的故事合宙超值开发板Air001、Air601、RP2040新品系列排队来你希望哪款先上市快来
【新品体验】基于RK3568!风火轮YY3568开发板免费试用
,沁恒微CH32V307开发样例 RK3568!四核64位ARMv8.2A架构,汇聚编译源码及实战样例 尺寸仅有21mm*51mm,板边采用邮票孔设计,合宙 Air105 核心板开发
合宙新品开发板排队来~Air001、Air601、树莓派,哪款你更期待
用代码写诗,用PCB作画 看松香袅袅,听同频心跳 …… 如果你也一样热爱 那么 在时间的光影里 共同书写属于我们的故事 合宙超值开发板 Air001、Air601、RP2040 新品 系列排队
【开源】基于Air32F103CBT6的DAPLink开发板 多功能高速下载烧录器
Air32F103CBT6芯片,并适配了216MHz主频和96KB RAM大资源,支持更快的下载速度,开发应用更为便捷的,仅2.5×1.3CM的迷你DAPLink新品开发板,并且软硬件全开源!
*附件
发表于 06-05 17:53
评论