Ошибка утверждения на доске при записи EEPROM

#movesense

Вопрос:

Я пытаюсь перенести код, который я написал на симуляторе, на датчик HR , и я столкнулся с проблемой, которой у меня не было на симуляторе.
Код пытается записать довольно большой буфер (7,5 КБ) в EEPROM с помощью EEPROM API доски, разделив его на временные буферы длиной 16 байт, вызывая asyncPut и ожидая завершения ( onPutResult устанавливает флаг) перед записью следующего фрагмента.
После нескольких тысяч итераций (это не всегда завершается неудачей на одной и той же итерации) выполнение останавливается с этим сообщением, которое я получаю через RTT: 860:Whiteboard.cpp
Я думаю, что это ошибка в утверждении. Есть ли дополнительная информация об этой ошибке? Что я делаю не так? Является ли мой подход к написанию больших объемов данных правильным?

Ответ №1:

УТВЕРЖДЕНИЕ в строке 860 Whiteboard.cpp срабатывает, когда датчик не может своевременно обработать уведомление от подписки. Я заметил «красный флаг» в вашем описании: «… и занят ожиданием завершения…», что, вероятно, и является причиной этого.

Платформа Movesense полностью асинхронна, что означает, что любой вид циклической работы строго запрещен, поскольку он препятствует нормальной работе датчика (например, описанная выше обработка уведомлений).

Чтобы избежать зацикливания, запустите следующий asyncPut в обратном вызове onPutResult() и обязательно укажите параметр AsyncRequestOptions::ForceAsync для вызова.

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

Комментарии:

1. Я занят циклированием, также запрещенным в событиях таймера? Потому что напряженное ожидание выполняется не непосредственно, onNotify а в onTimer таймере, запущенном из уведомления

2. Это запрещено везде, если вы не создадите для этого другую тему (на самом деле это того не стоит).