9

我正在使用 nodeMCU 制作智能家居系统,我需要从模块中存储和检索数据。我使用了以下功能。

function save_settings(name,value)
  file.remove(name)
  file.open(name,"w+")
  file.writeline(value)
  file.close()
end

它可以工作,但是如果我快速触发上述功能,它会很慢并且 NodeMCU 崩溃......有时需要 FS 格式才能再次使用它。

所以我的问题是:有没有其他方法可以使变量在重启之间保持不变?

4

2 回答 2

6

我正在使用最新的固件,0.9.6-dev_20150704,浮动版本(https://github.com/nodemcu/nodemcu-firmware/releases

这段代码一开始需要 62-63 毫秒才能完成,并且每次连续运行代码似乎都会增加几分之一毫秒,在执行了几百次之后,它几乎达到了 100 毫秒。它从来没有撞到我身上。

function save_setting(name, value)
  file.open(name, 'w') -- you don't need to do file.remove if you use the 'w' method of writing
  file.writeline(value)
  file.close()
end

function read_setting(name)
  if (file.open(name)~=nil) then
      result = string.sub(file.readline(), 1, -2) -- to remove newline character
      file.close()
      return true, result
  else
      return false, nil
  end
end

startTime = tmr.now()

test1 = 1200
test2 = 15.7
test3 = 75
test4 = 15000001
save_setting('test1', test1)
save_setting('test2', test2)
save_setting('test3', test3)
save_setting('test4', test4)

1exists, test1 = read_setting('test1')
2exists, test2 = read_setting('test2')
3exists, test3 = read_setting('test3')
4exists, test4 = read_setting('test4')

completeTime = (tmr.now()-startTime)/(1000)
print('time to complete (ms):')
print(tostring(completeTime))
于 2015-10-17T17:11:45.243 回答
3

如果您升级到较新的版本(基于 SDK 1.4.0),您可以使用 rtcmem 内存插槽:

local offset = 10
local val = rtcmem.read32(offset, 1)
rtcmem.write32(offset, val + 1)

该记忆被记录为在深度睡眠周期中持续存在;我发现它可以在硬件和软件重置中持续存在(但不是循环供电。)

于 2016-04-19T16:39:59.090 回答