Есть ли способ узнать, сколько памяти EEPROM используется?

Я просмотрел API-интерфейсы "бортовой журнал" и "регистратор данных", и я не могу сказать, что регистратор данных почти заполнен. Я нашел вызов API по следующему пути "/Mem/ Журнал /IsFull". Если я правильно понял, это сообщит мне, когда журнал заполнится, и регистратор данных прекратит регистрацию.

Итак, мой вопрос: есть ли способ узнать, какая часть памяти используется в настоящее время, чтобы я мог очистить старые данные (нужно выполнить некоторые вычисления на них, прежде чем они будут удалены), прежде чем заполнится EEPROM и Datalogger остановится запись?

1 ответ

Решение

Память данных журнала /DataLogger концептуально представляет собой кольцевой буфер. Вот почему /Mem/DataLogger/IsFull всегда возвращает false для датчика Movesense (Suunto использует один и тот же API в своих часах, где ситуация отличается). Поэтому датчик никогда не прекращает запись, он просто заменяет старые данные новыми.

Вот несколько стратегий, которые вы можете использовать:

План А:

  1. Создать новый журнал (POST /Mem/ Журнал / Записи => возвращает logId для него)
  2. Начать запись (PUT /Mem/DataLogger/State: LOGGING)
  3. Время от времени создавайте новый журнал (POST /Mem/ Журнал / Записи). Примечание: это можно сделать, пока ведется регистрация!
  4. Если вы хотите узнать, в каком состоянии находится журнал, прочитайте / Mem / Журнал / Записи. Когда самая старая запись полностью перезаписана, она исчезает из списка. Примечание: GET /Entries - тяжелая операция, поэтому вы можете не захотеть делать это, когда работает регистратор!

План б

Время от времени запускайте новый журнал и обрабатывайте предыдущий. Таким образом, журнал никогда не перезаписывает то, что вы не обработали.

План С

(Примечание. Это низкий уровень, который может сломаться при будущем выпуске датчика Movesense)

ПОЛУЧИТЕ первые 256 байтов микросхемы EEPROM #0, используя / Component / EEPROM API. Эта область содержит несколько структур ExtflashChunkStorage::StorageHeader (см. ExtflashChunkStorage.h), остальные заполнены 0xFF. Последний StorageHeader перед 0xFF является текущим. С помощью этого StorageHeader можно увидеть, где начинается кольцевой буфер (firstChunk) и где записываются следующие данные (курсор). Разница между ними заключается в используемой памяти. (Примечание: поскольку это кольцевой буфер, разница может быть отрицательной. В этом случае добавьте к нему "Размер области журнала - 256")

Полное раскрытие: я работаю в команде Movesense

Другие вопросы по тегам