У меня проблема с декодированием пакета, который отправляется через UART микроконтроллера (прошивка должна быть не металлической, без поддержки RTOS).Пакет имеет длину 32 байта и отправляется каждые 10 миллисекунд (непрерывно, без остановки).
Мне нужно выполнить минимальную обработку в ISR (чтобы ISR был достаточно коротким) и выполнить отложенную обработку в цикле main ().На мой взгляд, есть два подхода: 1. Использовать безопасный для прерывания кольцевой буфер с ISR-записью в буфер и чтением из него цикла main ().Предполагается, что указатель head и tail является атомарным типом моей архитектуры, чтобы гарантировать, что буфер безопасен от прерываний.Смотрите пример реализации здесь .
Используйте схему двойной буферизации (пинг-понг), в которой цикл main () должен обрабатывать один из буферов, пока ISR записывает в другой.Предположим, что я могу атомарно изменить указатель на буфер ISR, чтобы избежать проблемы критической секции.
UART способен генерировать непустое прерывание RIF FIFO.Также доступна поддержка DMA.
- Какая оптимальная структура данных для использования здесь?
- Какая здесь компромиссная комбинация?