今天我們學習合宙低功耗4G模組Air780EP的fskv開發示例。
一、簡介
-
相容fdb的函式
-
使用fdb的flash空間,啟用時也會替代fdb庫
-
功能上與EEPROM是類似的
fskv與fdb的實現機制導致的差異
功能 |
fskv |
fdb |
value長度 |
4096 |
255 |
key長度 |
63 |
64 |
空間利用率(對比) |
較低 |
較高 |
讀取速度 |
恆定 |
髒資料影響速度,非恆定 |
寫入資料 |
恆定 |
髒資料影響速度,非恆定 |
均衡擦除 |
自動 |
自動 |
二、環境準備
2.1 Air780EP開發板一套
三、程式介紹
3.1 API介紹
詳細API介紹見:fskv-API
3.2 初始化kv資料庫
fskv.init()
引數
無
返回值
返回值型別 | 解釋 |
boolean |
成功返回true,否則返回false |
3.3 設定一對kv資料
fskv.set(key, value)
引數
傳入值型別 | 解釋 |
string |
key的名稱,必填,不能空字串 |
string |
使用者資料,必填,不能nil, 支援字串/數值/table/布林值, 資料長度最大4095位元組 |
返回值
返回值型別 | 解釋 |
boolean |
成功返回true,否則返回false |
3.4 設定table內的鍵值對資料
fskv.sett(key, skey, value)
引數
傳入值型別 | 解釋 |
string |
key的名稱,必填,不能空字串 |
string |
table的key名稱, 必填, 不能是空字串 |
string |
使用者資料,必填,支援字串/數值/table/布林值, 資料長度最大4095位元組 |
返回值
返回值型別 | 解釋 |
boolean |
成功返回true,否則返回false/nil |
3.5 根據key獲取對應的資料
fskv.get(key, skey)
引數
傳入值型別 | 解釋 |
string |
key的名稱,必填,不能空字串 |
string |
可選的次級key,僅當原始值為table時有效,相當於 fskv.get(key)[skey] |
返回值
返回值型別 |
解釋 |
any |
存在則返回資料,否則返回nil |
3.6 根據key刪除資料
fskv.del(key)
引數
傳入值型別 | 解釋 |
string |
key的名稱,必填,不能空字串 |
返回值
返回值型別 | 解釋 |
bool |
成功返回true,否則返回false |
3.7 清空整個kv資料庫
fskv.clear()
引數
無
返回值
返回值型別 |
解釋 |
bool |
成功返回true,否則返回false |
3.8 kv資料庫迭代器
fskv.iter()
引數
無
返回值
返回值型別 |
解釋 |
userdata |
成功返回迭代器指標,否則返回nil |
3.9 kv迭代器獲取下一個key
fskv.next(iter)
引數
傳入值型別 | 解釋 |
userdata |
fskv.iter()返回的指標 |
返回值
返回值型別 |
解釋 |
string |
成功返回字串key值, 否則返回nil |
3.10 獲取kv資料庫狀態
fskv.status()
引數
無
返回值
返回值型別 | 解釋 |
int |
已使用的空間,單位位元組 |
int |
總可用空間, 單位位元組 |
int |
總kv鍵值對數量, 單位個 |
四、實現流程
4.1 使用luatools工具下載韌體和指令碼到開發板中
4.2 透過luatools列印檢視效果:
由上圖可以看出,fskv支援存放布林,數值,小數,字串,等均可。還可以存放table型別的值。但不能存放nil, function, userdata, task型別的值。
五、常見問題
NVM壞了的話會不會影響fskv儲存?
不同的flash互不影響。