Использует ли Arduino Mega один буфер или несколько буферов?
Итак, в Arduino Mega есть Serial, Serial1, Serial2, Serial3.
Тем не менее, используют ли эти последовательные линии один и тот же буфер? или четыре независимых? т. е. действительно ли они получают отдельные файлы независимо друг от друга, или они действительно используют какое-то совместное программное обеспечение? Как это повлияет на кодирование?
2 ответа
Каждый экземпляр класса HardwareSerial имеет собственные буферы. Здесь вы можете увидеть это в исходном коде. Экземпляры объявляются/определяются в конце файла HardwareSerial.h/.cpp.
На самом деле на каждый последовательный аппаратный интерфейс приходится 2 буфера: Аппаратный буфер, то есть 1 байт (для каждого направления передачи данных). Затем библиотека Serial передает этот байт в дополнительный буфер (размером 64 байта) из ISR. Каждый аппаратный последовательный интерфейс (Serial
и Serial1
to 3 на Mega) имеет собственный аппаратный буфер.
Затем библиотека Serial
реализуется как класс. Каждый аппаратный последовательный интерфейс получает собственный экземпляр этого класса, включая 64-байтовый буфер.
Таким образом, оборудование и память полностью разделены. Единственное, что они разделяют, это процессорное время для обслуживания прерываний, что не является проблемой, пока вы не делаете что-то очень неправильное с прерываниями.
- Как оптимизировать проверку конкретной строки в потоке UART
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как использовать Serial.setTimeout()
- Аппаратная последовательная библиотека Arduino с поддержкой управления потоком rts/cts
- Отправить структуру через Serial
- Передавать данные структуры во внешнюю структуру через serial?
- Мост I2C-UART в виде прорыва или в корпусе DIP
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
с какими проблемами вы столкнулись?, @jsotola
@jsotola Пока нет, но я пытаюсь использовать UART для создания быстрой системы управления с дистрибутивными компонентами. Таким образом, было бы много данных в кругах мс на нескольких портах одновременно. По сути, я пытаюсь использовать избыточный поток данных для обеспечения быстрой и надежной обработки... и неплохо знать, как работает этот буфер ., @ShoutOutAndCalculate
имеет смысл быть активным .... вы можете запустить тест, подавая одни и те же данные на все три порта и считывая данные с разных скоростей из трех портов .... вы можете соединить три приемных контакта вместе .... читать кусками произвольного размера, @jsotola