2013-06-11 3 views
0

Один быстрый вопрос: делать прерывания, например, Arduino, каким-либо образом вмешиваться в отправку и получение дейтаграмм через UDP? Или данные «ждут» в каком-то буфере?Препятствует ли UDP прерывание?

Если это полезно для ответа, я использую библиотеку UDP на Arduino Mega с экраном Ethernet и QUdpSocket Qt на Lenovo X201 через TP-LINK WR702N Nano.

Благодаря, мистер Mystère

+0

Обновить свой пост, чтобы указать оборудование вы используете для подключения Ethernet. – jdr5ca

+0

Готово. Я не знал, что это зависит от устройства, за исключением части прерывания. Разве это не протокол? –

+0

И как протокол, наплевать на такие вещи, как прерывания, было бы безразлично. Таким образом, это зависит от устройства, платформы, ОС и т. Д. Непонятно, какой ответ вы ищете - и стек TCP/IP обрабатывается по-разному по-другому. Arduino и коробку, работающую, например. Linux. – nos

ответ

1

Щит 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()

+0

Отличный ответ, мне больше нечего сказать, кроме как поблагодарить вас! –

Смежные вопросы