Что вы подразумеваете под встроенным устройством? Я думаю, что большинство современных DSP и процессоров легко справляются с такой нагрузкой. Проблема не в циклическом буфере, а в том, как вы собираете байты из последовательного порта.
Есть ли в вашем UART аппаратный fifo? Если да, то вам следует включить его. Если у вас есть прерывание на байт, вы можете быстро столкнуться с проблемами, особенно если вы работаете с ОС или с виртуальной памятью, где стоимость IRQ может быть достаточно высокой.
Если ваша принимающая прошивка очень простая (без многозадачности) и у вас нет аппаратного fifo, режим опроса может быть лучшим решением, чем управляемый прерываниями, потому что тогда ваш процессор выполняет только прием данных UART, и нет прерываний.
Другая проблема может быть связана с протоколом передачи. Например, если у вас есть длинный пакет данных, который вам нужен для контрольной суммы, и вы делаете всю контрольную сумму в конце пакета, тогда все время обработки пакета находится в конце его, и именно поэтому вы можете пропустить начало следующего пакета.
Итак, круговой буфер в порядке, и вы должны улучшить его:
- Как вы взаимодействуете с оборудованием
- протокол (длина пакета, подтверждение и т. Д.)