Щит Arduino Ethernet основан на чипе Wiznet W5100, который содержит 16k буфер, используемый для Rx и Tx буферов data sheet. Чип реализует стек протоколов, что означает, что пакеты принимаются и передаются независимо от чипа основной платы Arduino. Для любого практического объема передачи данных прерывания или задачи на основном чипе не будут мешать сетевому стеклу. Если вы переносите данные по шкале 16k и не в состоянии идти в ногу со временем, вы можете начать потерять данные.
Экраны Arduino wifi на самом деле содержат микроконтроллер «больше», чем сам Arduino, и это также будет буферизовать трафик Ethernet. Часть причин, по которым Ethernet-чипы стоят столько же, сколько Arduino, заключается в том, что они несут большую часть рабочей нагрузки.
Думая о вопросе «что прерывают прерывания?» это хороший вопрос. Вы можете быть уверены, что все в цикле() будет прервано в любой момент или лучше подумать в любой возможной точке. Прерывания не встречаются на уровне кода C++, а на уровне машинного кода. В середине любой строки кода на C++ вы должны ожидать, что произойдет прерывание. Поэтому обработчики прерываний, которые совместно используют переменные с кодом цикла(), нуждаются в тщательном рассмотрении. Например, если ваш цикл() содержит
y = 3 + 4*x * 5 * x*x;
и обработчик прерываний изменяет глобальную переменную х, значение у может в конечном итоге с некоторыми невозможных значений. Если у вас есть операции в цикле(), который вы хотите защищен от прерываний, у вас есть возможность отключить прерывания
see noInterupts()
Обновить свой пост, чтобы указать оборудование вы используете для подключения Ethernet. – jdr5ca
Готово. Я не знал, что это зависит от устройства, за исключением части прерывания. Разве это не протокол? –
И как протокол, наплевать на такие вещи, как прерывания, было бы безразлично. Таким образом, это зависит от устройства, платформы, ОС и т. Д. Непонятно, какой ответ вы ищете - и стек TCP/IP обрабатывается по-разному по-другому. Arduino и коробку, работающую, например. Linux. – nos