我查看了“日志”和“数据记录器”API,无法判断数据记录器几乎已满。我找到了具有以下路径“/Mem/Logbook/IsFull”的 API 调用。如果我理解它是正确的,这将在日志已满并且数据记录器已停止记录时通知我。
所以我的问题是:有没有办法知道当前使用了多少内存,以便在 EEPROM 已满且 Datalogger 停止之前清理旧数据(需要在删除之前对它们进行一些计算)记录?
我查看了“日志”和“数据记录器”API,无法判断数据记录器几乎已满。我找到了具有以下路径“/Mem/Logbook/IsFull”的 API 调用。如果我理解它是正确的,这将在日志已满并且数据记录器已停止记录时通知我。
所以我的问题是:有没有办法知道当前使用了多少内存,以便在 EEPROM 已满且 Datalogger 停止之前清理旧数据(需要在删除之前对它们进行一些计算)记录?
Logbook/DataLogger 的数据存储器在概念上是一个环形缓冲区。这就是/Mem/DataLogger/IsFull在 Movesense 传感器上总是返回false的原因(Suunto 在情况不同的手表中使用相同的 API)。因此传感器永远不会停止记录,它只是用新的数据替换最旧的数据。
以下是您可以使用的几种策略:
计划A:
B计划
时不时地启动一个新日志并处理前一个日志。这样,日志永远不会覆盖您尚未处理的内容。
C计划
(注意:这是低级别,可能会在未来的某些 Movesense 传感器版本中中断)
使用/Component/EEPROM API获取 EEPROM 芯片 #0 的前 256 个字节。该区域包含多个 ExtflashChunkStorage::StorageHeader 结构(参见:ExtflashChunkStorage.h),其余部分填充为 0xFF。0xFF 之前的最后一个 StorageHeader 是当前的。使用该 StorageHeader 可以看到环形缓冲区的开始位置(firstChunk)以及下一个数据写入的位置(cursor)。两者的区别在于使用的内存。(注意:由于它是一个环形缓冲区,因此差异可能是负数。在这种情况下,将“日志区域的大小 - 256”添加到它)
全面披露:我为 Movesense 团队工作