2011-12-16 12 views
5

कोई घड़ी नहीं बना रहा है। मैं घड़ी में ईथरनेट केबल प्लग करके घड़ी सेट करना चाहता हूं। ज्यादातर समय घड़ी इंटरनेट पर प्लग नहीं किया जाएगा।ईथरनेट 60 सेकंड के लिए ब्लॉक शुरू करता है यदि कोई ईथरनेट केबल

मेरे पास एक Arduino बोर्ड और एक ईथरनेट shield है जो सफलतापूर्वक एक समय सर्वर से कनेक्ट हो सकता है और समय पढ़ सकता है (उदाहरण> ईथरनेट के तहत UdpNtpClient उदाहरण फ़ाइल देखें)।

समस्या यह है कि ईथरनेट शील्ड को कॉन्फ़िगर करने के लिए, Ethernet.begin() ढाल 60   सेकेंड के लिए कॉल ब्लॉक अगर ढाल इंटरनेट से कनेक्ट नहीं है। मैं घड़ी को समय बताने के लिए चाहता हूं और समय-समय पर यह देखने के लिए जांच करता हूं कि इसमें एक ईथरनेट केबल प्लग है या नहीं, और यदि ऐसा है, तो उस समय कोई सुधार करें। ज्यादातर बार इस चेक के नकारात्मक नतीजे होने जा रहे हैं, इसलिए, मैं हर बार 60   सेकंड के लिए घड़ी फ्रीज नहीं कर सकता।

क्या यह पता लगाना संभव है कि केबल Ethernet.begin() फ़ंक्शन से तेज तरीके से कनेक्ट है या नहीं? क्या "मल्टीथ्रेडिंग" समाधान लिखना संभव है, जहां Ethernet.begin() गैर-अवरुद्ध है?

उत्तर

1

स्टॉक ईथरनेट लाइब्रेरी को देखते हुए, इसे अवरुद्ध करने से रोकने के लिए संभव नहीं है।

मुझे लगता है कि आप using DHCP हैं? ऐसा लगता है कि अवरोध कहाँ से आता है। स्थिर आईपी पते का उपयोग करते समय क्या आपको वही समस्या मिलती है?

ईथरनेट लाइब्रेरी के कुछ फोर्क समेत इस सटीक मुद्दे को कवर करने वाले Google पर कई ब्लॉग पोस्ट उपलब्ध हैं जो आपको गैर-अवरुद्ध फैशन में ऐसा करने की अनुमति देगी।

+0

धन्यवाद! मुझे लगता है कि यह काम करेगा। किसी ने यह भी कहा कि मैं एक जीपीएस इकाई से समय प्राप्त कर सकता हूं, इसलिए मैं भी कोशिश कर सकता हूं। – rob

+0

जीपीएस मेरे लिए एक भव्य विचार की तरह लगता है, हम अपने हार्डवेयर के साथ शुरुआत में घड़ियों को सिंक करने के लिए करते हैं। बस याद रखें कि जीपीएस समय सामान्य यूटीसी समय से कुछ सेकंड है ... इसके अलावा, ईथरनेट केबल को प्लग करने की कोई ज़रूरत नहीं है। आपकी घड़ी परियोजना के साथ शुभकामनाएं = डी –

+0

मुझे "इस सटीक मुद्दे को कवर करने वाले Google पर उपलब्ध ब्लॉग पोस्ट" कहां मिलेंगी? – powtac

1

DHCP.h शीर्षलेख फ़ाइल में आप एक नए DHCP कनेक्शन के लिए कक्षा परिभाषा पा सकते हैं। फिर आप देख सकते हैं कि 60000ms का डिफ़ॉल्ट टाइमआउट मान है।

(सहायक संकेत: यदि आप प्रारंभिक प्रयास से पहले प्राप्त करते हैं, और अपने एड्रिनो परियोजनाओं को प्रबंधित करने के लिए ग्रहण का उपयोग करना शुरू करते हैं, तो यह वास्तव में बहुत अच्छा है क्योंकि आप केवल ईथरनेट.बेजिन जैसे कार्यों पर F3 दबा सकते हैं और थोड़ी सी यात्रा ले सकते हैं इन प्रकार की सेटिंग्स को खोजने के लिए पुस्तकालय)

यह जानना मुश्किल है कि टाइमआउट कितना समय होना चाहिए। लेकिन एक मिनट वास्तव में एक लंबे समय की तरह लगता है। बेशक आप कम नहीं जाना चाहते हैं। मैं 15 सेकंड से कम नहीं जाऊंगा।

/डेविड कॉक्स

संबंधित मुद्दे