Использует ли Arduino Mega один буфер или несколько буферов?

Итак, в Arduino Mega есть Serial, Serial1, Serial2, Serial3.

Тем не менее, используют ли эти последовательные линии один и тот же буфер? или четыре независимых? т. е. действительно ли они получают отдельные файлы независимо друг от друга, или они действительно используют какое-то совместное программное обеспечение? Как это повлияет на кодирование?

, 👍0

Обсуждение

с какими проблемами вы столкнулись?, @jsotola

@jsotola Пока нет, но я пытаюсь использовать UART для создания быстрой системы управления с дистрибутивными компонентами. Таким образом, было бы много данных в кругах мс на нескольких портах одновременно. По сути, я пытаюсь использовать избыточный поток данных для обеспечения быстрой и надежной обработки... и неплохо знать, как работает этот буфер ., @ShoutOutAndCalculate

имеет смысл быть активным .... вы можете запустить тест, подавая одни и те же данные на все три порта и считывая данные с разных скоростей из трех портов .... вы можете соединить три приемных контакта вместе .... читать кусками произвольного размера, @jsotola


2 ответа


1

Каждый экземпляр класса HardwareSerial имеет собственные буферы. Здесь вы можете увидеть это в исходном коде. Экземпляры объявляются/определяются в конце файла HardwareSerial.h/.cpp.

,

2

На самом деле на каждый последовательный аппаратный интерфейс приходится 2 буфера: Аппаратный буфер, то есть 1 байт (для каждого направления передачи данных). Затем библиотека Serial передает этот байт в дополнительный буфер (размером 64 байта) из ISR. Каждый аппаратный последовательный интерфейс (Serial и Serial1 to 3 на Mega) имеет собственный аппаратный буфер.

Затем библиотека Serial реализуется как класс. Каждый аппаратный последовательный интерфейс получает собственный экземпляр этого класса, включая 64-байтовый буфер.

Таким образом, оборудование и память полностью разделены. Единственное, что они разделяют, это процессорное время для обслуживания прерываний, что не является проблемой, пока вы не делаете что-то очень неправильное с прерываниями.

,