Есть ли тайм-аут для Ethernet.begin?

Я работаю над проектом, но только для тестирования я еще не подключил его к Интернету, хотя код ДОЛЖЕН быть готов к запуску.

Пытаясь протестировать часть моего кода с помощью последовательной консоли, я понял, что моя программа блокируется, и проследил ее до этого места. Теперь arduino uno и ethernet shield в настоящее время не подключены к Интернету, поэтому мой вопрос в том, как я могу тайм-аут этой функции, чтобы я мог продолжать свою программу, когда нет Интернета для ее подключения.

Вот мой код в функции настройки

if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // попробуйте настроить с помощью IP-адреса вместо DHCP:
    Ethernet.begin(mac, ip);
  }

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

, 👍0


2 ответа


3

Тайм-аут по умолчанию для DHCP составляет 1 минуту. Существует также тайм-аут ответа, и в библиотеке millis используется для тайм-аутов. Я не знаю, есть ли тайм-аут для всего, но полагаю, что есть.

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

Это исходный код для Ethernet.begin: Ethernet.cpp

,

Спасибо, это приятно знать. Я не знаю точно, как долго я это делал, я предполагаю обычные 30 секунд, так что мне нужно будет сделать это еще раз и удвоить свое терпение, лол, @John Sly

Код действительно может зависнуть в функции W5100Class::execCmdSn. Он ждет завершения команды путем чтения регистра и ждет, пока read вернет 0. Если он по какой-то причине возвращает ненулевое значение (плохой контакт и т. Д.), Функция повесит трубку., @Alexandr Zarubkin


0

Я только что разобрался с функцией Ethernet.begin (возможно, они изменили ее с момента публикации поста), и ее можно вызвать так:

Ethernet.begin(mac, тайм-аут)

Затем я вызвал его с Mac и значением тайм-аута, и это работает!

Вы также можете установить «responseTimeout», но я не уверен, в чем тогда разница: Ethernet.begin(mac, timeout, responseTimeout)

,