После добавления записи настроек во flash UART начал терять байты
Чтобы запись настроек не прерывали другие задачи, её обернули так:
taskENTER_CRITICAL();
flash_erase_sector(SETTINGS_SECTOR); /* ~20 мс */
flash_write(SETTINGS_ADDR, &cfg, sizeof cfg);
taskEXIT_CRITICAL();
Во время сохранения приёмник UART на 115200 бод регистрирует ошибку переполнения (overrun), часть команд теряется. Почему и как исправить?
- Секция маскирует прерывания; защитить мьютексом
- Flash и UART конфликтуют на одной шине памяти
- Критическая секция тормозит тик; поднять частоту
- Увеличить стек задачи, которая пишет во flash
