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 に答える