Есть ли тайм-аут для 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


1 ответ


3

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

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

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

,

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

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