我正在ESP32上的MicroPython中开发一个应用程序,其中要发布的数据缓冲区需要在断电/重启后保持不变。
BTree似乎是显而易见的解决方案,但是在我的测试中,我无法使写入BTree db的数据持久化-实际上似乎根本没有将其写入文件。
这是一些示例测试代码;如果有人可以提供任何帮助,我将非常感激,请:
import btree
try:
f = open("buffer.db", "r+b")
except OSError:
f = open("buffer.db", "w+b")
db = btree.open(f)
db[b"1"] = b"first"
db[b"2"] = b"second"
db[b"3"] = b"third"
db[b"4"] = b"fourth"
db[b"5"] = b"fifth"
db.flush()
print('The database contains the following:')
for k in db:
key = k.decode('utf-8')
val = db[k].decode('utf-8')
print('Key:', key, 'Value:', val)
print('End of data.')
db.close()
f.close()`
这一切似乎都可以正常工作,并且预期输出为REPL:
The database contains the following:
Key: 1 Value: first
Key: 2 Value: second
Key: 3 Value: third
Key: 4 Value: fourth
Key: 5 Value: fifth
End of data.
但是如果我尝试以下操作:
f = open("buffer.db", "r+b")
db = btree.open(f)
print('The database contains the following:')
for k in db:
key = k.decode('utf-8')
val = db[k].decode('utf-8')
print('Key:', key, 'Value:', val)
print('End of data.')
db.close()
f.close()
... REPL的输出是:
The database contains the following:
End of data.
在检查数据库文件“ buffer.db”时,其大小为0字节。
我确定我犯了一个小学生错误,但是我一生都找不到它。
在此先感谢您的帮助。
=========
根据其他建议,我现在已经在MicroPython的unix端口(在Ubuntu上运行)上对此进行了测试,它可以完美运行,包括成功地将数据写入Btree db文件。
显然,这是MicroPython for ESP32的端口特有的问题。