如果没有以太网电缆,以太网开始阻塞60秒

时间:2011-12-16 05:17:14

标签: arduino ethernet

我正在制作一个时钟。我想通过将以太网电缆插入时钟来设置时钟。大多数情况下,时钟不会插入互联网。

我有一个Arduino板和一个以太网shield,它可以成功连接到时间服务器并读取时间(参见示例>以太网下的UdpNtpClient示例文件)。

问题是,如果屏蔽未连接到Internet,则配置以太网屏蔽时,Ethernet.begin()呼叫会阻塞60秒。我希望时钟告诉时间并定期检查它是否插有以太网电缆,如果有,请对时间进行任何更正。但是,大多数情况下,此检查会产生负面结果,因此我每次都不能将时钟冻结60秒。

是否可以检测电缆是否以比Ethernet.begin()功能更快的方式连接?是否可以编写一个“多线程”解决方案,其中Ethernet.begin()是非阻塞的?

2 个答案:

答案 0 :(得分:1)

查看库存以太网库,无法阻止其阻塞。

我猜你是using DHCP?这似乎是阻止来自的地方。使用静态IP地址时会出现同样的问题吗?

谷歌上有一些博客文章可以解决这个问题,包括以太网库的一些分支,可以让你以非阻塞方式完成这项工作。

答案 1 :(得分:1)

在DHCP.h头文件中,您可以找到新DHCP连接的类定义。 然后您可以看到默认超时值为60000ms。

(有用的提示:如果你已经超越了最初的努力,并开始使用eclipse来管理你的adruino项目,它真的很棒,因为你可以在像Ethernet.begin这样的功能上按F3并进行一些旅行库找到这些类型的设置)

很难知道超时应该有多长。但是一分钟似乎很长一段时间。当然你不想做空。 我不会少于15秒。

/ David Cox