Из трёх быстрых импульсов счётчика обработан только один
Прерывание датчика расхода на каждый импульс вызывает xTaskNotifyGiveFromISR. Задача:
for (;;) {
if (ulTaskNotifyTake(pdTRUE, portMAX_DELAY) > 0) {
total_ml += ML_PER_PULSE;
log_pulse(); /* ~3 мс */
}
}
При большом расходе импульсы идут чаще, чем раз в 3 мс, и расход в отчёте занижен. Прерывания при этом все отрабатывают. Где теряются импульсы?
- pdTRUE обнуляет счётчик, а учтён лишь один импульс
- Уведомления из прерывания не накапливаются
- Уведомление теряется, пока задача не заблокирована
- portMAX_DELAY пропускает часть уведомлений
