有没有办法知道使用了多少 EEPROM 内存?

Are there a way to know how much of the EEPROM memmory that is used?

我已经查看了 "logbook" 和 "datalogger" APIs 并且无法判断数据记录器几乎已满。我发现 API 调用具有以下路径“/Mem/Logbook/IsFull”。如果我理解正确,当日志已满并且数据记录器已停止记录时,这将通知我。

所以我的问题是:有没有办法知道当前有多少内存在使用,以便我在 EEPROM 被删除之前清理旧数据(需要在删除它们之前对它们进行一些计算)已满且数据记录器停止记录?

Logbook/DataLogger的数据内存在概念上是一个环形缓冲区。这就是为什么 /Mem/DataLogger/IsFull 在 Movesense 传感器上总是 returns false(Suunto 在其手表中使用相同的 API哪里情况不一样)。因此传感器永远不会停止记录,它只是用新的数据替换最旧的数据。

您可以使用以下几种策略:

方案A:

  1. 新建日志(POST /Mem/Logbook/Entries => returns logId)
  2. 开始记录(PUT /Mem/DataLogger/State:记录)
  3. 每隔一段时间创建一个新日志 (POST /Mem/Logbook/Entries)。注意:这可以在记录正在进行时完成!
  4. 当您想知道日志的状态时,请阅读/Mem/Logbook/Entries。当最旧的条目被完全覆盖后,它就会从列表中消失。注意:GET /Entries 是一项繁重的操作,因此您可能不想在记录器为 运行!
  5. 时执行此操作

B计划

时不时地开始一个新日志并处理前一个日志。这样日志就不会覆盖您尚未处理的内容。

计划C

(注意:这是低级别,可能会随着未来的 Movesense 传感器发布而中断)

使用/Component/EEPROMAPI获取EEPROM芯片#0的前256字节。该区域包含多个ExtflashChunkStorage::StorageHeader结构(参见:ExtflashChunkStorage.h),其余填充0xFF。 0xFF 之前的最后一个 StorageHeader 是当前的。使用该 StorageHeader,可以看到环形缓冲区的起始位置 (firstChunk) 以及下一个数据写入的位置 (cursor)。两者的区别在于使用的内存。 (注意:因为它是一个环形缓冲区,所以差异可以是负数。在这种情况下添加 "Size of Logbook area - 256")

完全披露:我在 Movesense 团队工作