本文來源電子發燒友社區,作者: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。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
開發板
+關注
關注
26文章
6291瀏覽量
118117 -
合宙通信
+關注
關注
0文章
160瀏覽量
2472 -
Air105
+關注
關注
0文章
48瀏覽量
442
發布評論請先 登錄
相關推薦
熱點推薦
LuatOS-Air腳本移植到LuatOS版本注意事項
。 LuatOS-Air的api: 在https://doc.openluat.com/wiki/21?wiki_page_id=2068這里,又分為了5.1 原生接口 ,合
Air780EPM開發板上的FFT應用實現:關鍵技術深度剖析
以Air780EPM開發板為硬件平臺,快速傅里葉變換(FFT)的應用實現成為嵌入式信號處理中的關鍵環節。本文將圍繞該開發板的硬件適配特性、FFT算法在嵌入式環境中的部署流程,深入解析代
以Air780EPM開發板為例:FFT應用示例核心要點全解析
以Air780EPM開發板作為實踐載體,本文將對FFT應用示例的核心要點展開全面解析。從開發板的硬件特性適配、FFT算法的實現流程,到示例代碼的核心模塊與調試要點,逐一拆解,確保
基于SHA105 CryptoAuthentication?芯片的硬件安全設計指南
用于對稱身份驗證用例的主機側,可提供安全密鑰存儲。該IC還可通過CheckMAC操作驗證附件/一次性安全設備上的MAC操作。SHA105身份
燒錄工具操作教程:新手也能快速掌握~
燒錄工具看似復雜,其實操作很簡單!現在就為你奉上清晰明了的使用說明,即使是新手也能迅速掌握。 本文就以 Air780EPM 開發板為例,演示燒錄工具的使用步驟。 ? 一、生成量產
Air8101多網融合戰略升級:Air780EPM模塊助力4G聯網落地
應用邁向新高度。 本文將分享Air8101核心板通過外掛Air780EPM整機開發板,實現4G聯網的功能示例。 ? 一、硬件準備工作 ? 1
解鎖CAN接口開發高效路徑!五個核心要點一次講透
高效開發CAN接口,關鍵在于把握協議基礎、硬件適配、錯誤管理、性能優化與調試五大核心要點。下面將逐一剖析每個環節的技術細節與實踐方法,助力開發者快速突破難點,實現可靠通信。 在
技術篇——Air8000開發板,一站式滿足多功能高擴展開發需求!
朋友們,Air8000開發板“多功能集成+高擴展性”,尤其適合需要通信、控制、數據采集的場景,如:遠程監控、智能終端等。 一、開發板主要配置 Air
一篇帶你搞定!Air8101:物聯網設備AirKiss配網方案
、 Air8101開發板AirKiss配網示例? 下文以Air8101開發板為例,演示AirKiss配網實操要點。 此配網方式極為簡單,使用示例源碼將
Air8101革新物聯網配網:AirKiss方案讓設備連接更智能!
、 Air8101開發板AirKiss配網示例? 下文以Air8101開發板為例,演示AirKiss配網實操要點。 此配網方式極為簡單,使用示例源碼將
閃電入門!支持CAN和以太網,開發板最新資料看這篇!
.com/air780epm/product/shouce/ ? 一、CAN接口電路參考設計 Air780EPM開發板及參考設計,采用的是川土微CAN收發器芯片。 川土微CAN收發器芯
深度解析——使用Luatools工具燒錄一個具體的項目到Air780EPM核心板中!
本篇文章重點介紹如何使用Luatools工具燒錄一個具體的項目到Air780EPM開發板中。 一、準備好項目文件 ?
【合宙Air105開發板試用體驗】在Air105上,一次搞懂openluat的基礎文件操作
評論