0

我查看了“日志”和“数据记录器”API,无法判断数据记录器几乎已满。我找到了具有以下路径“/Mem/Logbook/IsFull”的 API 调用。如果我理解它是正确的,这将在日志已满并且数据记录器已停止记录时通知我。

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

4

1 回答 1

1

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

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

计划A:

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

B计划

时不时地启动一个新日志并处理前一个日志。这样,日志永远不会覆盖您尚未处理的内容。

C计划

(注意:这是低级别,可能会在未来的某些 Movesense 传感器版本中中断)

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

全面披露:我为 Movesense 团队工作

于 2018-07-05T08:41:20.847 回答