Ethernet начинает блоки на 60 секунд, если нет кабеля Ethernet - PullRequest
5 голосов
/ 16 декабря 2011

Я строю часы.Я хочу установить часы, подключив к ним кабель Ethernet.Большую часть времени часы не будут подключены к Интернету.

У меня есть плата Arduino и Ethernet щит , которые могут успешно подключаться к серверу времени и считывать время (см. Файл примера UdpNtpClient в разделе Примеры> Ethernet).

Проблема заключается в том, что для настройки экрана Ethernet, Ethernet.begin() вызов блокируется на 60 секунд, если экран не подключен к Интернету.Я хотел бы, чтобы часы сообщали время и периодически проверяли, подключен ли к нему кабель Ethernet, и если да, вносите какие-либо корректировки во время.Однако в большинстве случаев эта проверка будет иметь отрицательный результат, поэтому я не могу каждый раз останавливать часы на 60 секунд.

Можно ли определить, подключен ли кабель вбыстрее, чем функция Ethernet.begin()?Можно ли написать «многопоточное» решение, где Ethernet.begin() неблокирует?

Ответы [ 2 ]

1 голос
/ 07 октября 2012

В заголовочном файле DHCP.h вы можете найти определение класса для нового соединения DHCP.Затем вы увидите, что по умолчанию установлено значение тайм-аута 60000 мс.

(полезный совет: если вы справились с первоначальными усилиями и начали использовать eclipse для управления своими проектами adruino, это действительно здорово, потому что вы можете просто нажать F3 на таких функциях, как Ethernet.begin и немногоПройдите через библиотеки, чтобы найти эти типы настроек)

Трудно понять, как долго должно быть время ожидания.Но минута кажется очень долгой.Конечно, вы не хотите идти в шорт.Я не пошел бы меньше чем за 15 секунд.

/ Дэвид Кокс

1 голос
/ 16 декабря 2011

Глядя на стандартную библиотеку Ethernet, невозможно предотвратить ее блокировку.

Полагаю, вы используете DHCP ? Похоже, именно отсюда происходит блокировка. Вы получаете ту же проблему при использовании статического IP-адреса?

В Google доступно несколько публикаций, посвященных именно этой проблеме, включая некоторые развилки библиотеки Ethernet, которые позволят вам сделать это неблокирующим образом.

...