<p> 今天我们学习的是低功耗<u>4G</u>模组<u>Ai</u>r780EP的fskv开发,让我们更了解它。</p>
讯享网
讯享网本文从简介,环境准备,程序介绍等来讲解整个示例:</p>
<strong>1、简介</strong></p>
讯享网兼容fdb的函数</p>
使用fdb的flash空间,启用时也会替代fdb库</p>
讯享网功能上与EEP<u>ROM</u>是类似的</p>
<strong>fskv与fdb的实现机制导致的差异</strong></p>
讯享网 功能</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> fskv</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> fdb</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> value长度</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 4096</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 255</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> key长度</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 63</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 64</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 空间利用率(对比)</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 较低</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 较高</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 读取速度</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 恒定</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 脏数据影响速度,非恒定</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 写入数据</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 恒定</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 脏数据影响速度,非恒定</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 均衡擦除</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 自动</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 自动</td> </tr></tbody></div><p> <strong>2、环境准备</strong></p>
<strong>2.1 Air780EP开发板一套</strong></p>
讯享网<strong>3、程序介绍</strong></p>
<strong>3.1 A<u>PI</u>介绍</strong></p>
讯享网详细API介绍见:fskv-API</p>
<strong>3.2 初始化kv数据库</strong></p>
讯享网fskv.init()</p>
<strong><u>参数</u></strong></p>
讯享网无</p>
<strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> boolean</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回true,否则返回false</td> </tr></tbody></div><p> <strong>3.3 设置一对kv数据</strong></p>
fskv.set(key, value)</p>
讯享网<strong>参数</strong></p>
传入值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> key的名称,必填,不能空字符串</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 用户数据,必填,不能nil, 支持字符串/数值/table/布尔值, 数据长度最大4095字节</td> </tr></tbody></div><p> <strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> boolean</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回true,否则返回false</td> </tr></tbody></div><p> <strong>3.4 设置table内的键值对数据</strong></p>
fskv.sett(key, skey, value)</p>
讯享网<strong>参数</strong></p>
传入值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> key的名称,必填,不能空字符串</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> table的key名称, 必填, 不能是空字符串</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 用户数据,必填,支持字符串/数值/table/布尔值, 数据长度最大4095字节</td> </tr></tbody></div><p> <strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> boolean</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回true,否则返回false/nil</td> </tr></tbody></div><p> <strong>3.5 根据key获取对应的数据</strong></p>
fskv.get(key, skey)</p>
讯享网<strong>参数</strong></p>
传入值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> key的名称,必填,不能空字符串</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 可选的次级key,仅当原始值为table时有效,相当于 fskv.get(key)[skey]</td> </tr></tbody></div><p> <strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> any</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 存在则返回数据,否则返回nil</td> </tr></tbody></div><p> <strong>3.6 根据key删除数据</strong></p>
fskv.del(key)</p>
讯享网<strong>参数</strong></p>
传入值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> key的名称,必填,不能空字符串</td> </tr></tbody></div><p> <strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> bool</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回true,否则返回false</td> </tr></tbody></div><p> <strong>3.7 清空整个kv数据库</strong></p>
fskv.clear()</p>
讯享网<strong>参数</strong></p>
无</p>
讯享网<strong>返回值</strong></p>
返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> bool</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回true,否则返回false</td> </tr></tbody></div><p> <strong>3.8 kv数据库迭代器</strong></p>
讯享网fskv.i<u>te</u>r()</p>
<strong>参数</strong></p>
讯享网无</p>
<strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> userdata</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回迭代器指针,否则返回nil</td> </tr></tbody></div><p> <strong>3.9 kv迭代器获取下一个key</strong></p>
fskv.next(iter)</p>
讯享网<strong>参数</strong></p>
传入值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> userdata</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> fskv.iter()返回的指针</td> </tr></tbody></div><p> <strong>返回值</strong></p>
讯享网 返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> string</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 成功返回字符串key值, 否则返回nil</td> </tr></tbody></div><p> <strong>3.10 获取kv数据库状态</strong></p>
fskv.status()</p>
讯享网<strong>参数</strong></p>
无</p>
讯享网<strong>返回值</strong></p>
返回值类型</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 解释</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> int</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 已使用的空间,单位字节</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> int</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 总可用空间, 单位字节</td> </tr><tr><td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> int</td> <td style="border-bottom:1px solid rgb(221,221,221);border-left:1px solid rgb(221,221,221);border-right:1px solid rgb(221,221,221);border-top:1px solid rgb(221,221,221);padding:5px 10px;"> 总kv键值对数量, 单位个</td> </tr></tbody></div><p> <strong>4、实现流程</strong></p>
讯享网<strong>4.1 使用luatools工具<u>下载</u>固件和脚本到开发板中</strong></p>
<img src="https://file1.elecfans.com/web2/M00/0B/6B/wKgaomchyBaAYW_rAAJslYSHsFw933.png" alt="wKgaomchyBaAYW_rAAJslYSHsFw933.png" /></p>
讯享网<strong>4.2 通过luatools打印查看效果:</strong></p>
<img src="https://file1.elecfans.com/web2/M00/0A/81/wKgZomchyC-AUtfxAAPROVzz5Kc568.png" alt="wKgZomchyC-AUtfxAAPROVzz5Kc568.png" /></p>
讯享网由上图可以看出,fskv支持存放布尔,数值,小数,字符串,等均可。还可以存放table类型的值。但不能存放nil, func<u>ti</u>on, userdata, task类型的值。</p>
<strong>5、常见问题</strong></p>
讯享网<strong>NVM坏了的话会不会影响fskv存储?</strong></p>
不同的flash互不影响。</p>
讯享网审核编辑 黄宇</p>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/189759.html