2012-11-18 45 views
5

मैं एक शौकिया पोर्टेबल रोबोटिक्स लाइब्रेरी (विंडोज़ और लिनक्स) बनाने की कोशिश कर रहा हूं जिसमें हार्ड रीयल-टाइम क्षमताएं हैं। यह मानक ईथरनेट को एक माइक्रोकंट्रोलर से कनेक्ट करने, उस डिवाइस पर फर्मवेयर अपलोड करने, फ़ील्डबस पर अन्य उपकरणों से कनेक्ट करने और समर्पित नियंत्रकों को चलाने वाले अन्य माइक्रोक्रोनरोलर को फर्मवेयर अपलोड करने में सक्षम होना चाहिए। यदि वास्तविक वास्तविक समय वांछित है तो एनआईसी आरटीनेट द्वारा समर्थित होंगे। मैं कम से कम 1 किलोहर्ट्ज़ की सामान्य सर्वो दरें चाहूंगा लेकिन प्राथमिक रूप से 2 किलोहर्ट्ज़ या इससे अधिक की आवश्यकता होगी। यह एक पूरी तरह से कस्टम प्रोटोकॉल चला रहा है (आईपी पर टीसीपी या यूडीपी नहीं) ताकि ओवरहेड न्यूनतम हो और फ्रेम प्राप्त करने या प्रसारित न होने पर हाई स्पीड फील्डबस संतृप्त हो सके। ईथरनेट फ्रेम में पेलोड को तब व्याख्या या उपकरणों से भेजा जा सकता है।पोर्टेबल हार्ड रीयल-टाइम सी या सी ++ कच्चे ईथरनेट प्रोटोकॉल लाइब्रेरी

1) मैं प्रोटोकॉल को सी ++ में रखना पसंद करता हूं लेकिन पता है कि "नया" कीवर्ड का उपयोग वास्तविक समय प्रोग्रामिंग के लिए काम नहीं करेगा। यदि मैं परियोजना को सी में परिवर्तित करने के बजाय सी ++ भाषा का उपयोग करना चुनता हूं तो मैं अन्य सीमाएं कैसे चलाऊंगा? क्या लोग पुस्तकें या वेबसाइटों की अनुशंसा करते हैं जो सी ++ का उपयोग कैसे करें और हार्ड रीयल-टाइम की समयसीमाओं को पूरा करें? मैं इसे संभव बनाता हूं और मुझे उम्मीद है कि सी ++ का उपयोग करने के साथ आगे बढ़ने में सक्षम होना चाहिए क्योंकि ऑरोकोस प्रोजेक्ट रीयल-टाइम सी ++ का उपयोग करता है। मैं सी कोड का उपयोग नहीं करना पसंद करूंगा।

2) पोर्टेबल प्रोटोकॉल लाइब्रेरी सामान्य उद्देश्य को रखने के लिए प्रोग्राम को गैर-रीयलटाइम ईथरनेट एडाप्टर दोनों पर एक साथ चलने वाले प्रोटोकॉल को कैसे संभालना चाहिए और एक आरटीनेट ईथरनेट एडाप्टर कहें?

मेरे पास एक विशिष्ट प्रश्न है जो एक पोर्टेबल म्यूटेक्स वर्ग कहने का सवाल होगा जो या तो बूस्ट या ज़ेनोमाई म्यूटेक्स का उपयोग कर सकता है।

समाधान 2 में समाधान 1 निम्न हो सकता है: यदि एप्लिकेशन को ज़ेनोमाई लाइब्रेरीज़ के साथ संकलित किया गया है तो एक ब्यूटियन ध्वज के साथ एक म्यूटेक्स बनाया जा सकता है ताकि यह कह सकें कि कौन से तरीके (या तो बूस्ट या ज़ेनोमाई) को रनटाइम पर लपेटा जाएगा लॉक और अनलॉक के लिए। यदि ज़ेनोमाई के लिए पुस्तकालय संकलित किया गया था तो इसमें बूस्ट म्यूटेक्स और ज़ेनोमाई म्यूटेक्स हो सकता है। मुझे इस समाधान को पसंद नहीं है क्योंकि यदि परियोजना ज़ेनोमाई के लिए संकलित की गई है तो इसमें बूस्ट और ज़ेनोमाई के लिए म्यूटेक्स के निजी चर शामिल होंगे, जो कि एक कम सुरुचिपूर्ण तरीके की तरह दिखता है, जिसके बाद केवल उस म्यूटेक्स की आवश्यकता होती है जिसे किसी की जरूरत होती है।

समाधान 2 में समाधान 2 निम्न हो सकता है: शुद्ध वर्चुअल इंटरफ़ेस विधियों के एक अमूर्त वर्ग से म्यूटेक्स में 2 अलग व्युत्पन्न कक्षाएं लिखें, एक बढ़ावा देने के लिए और एक Xenomai के लिए। मुझे इस तरह से बेहतर पसंद है लेकिन फिर बताते हैं कि रन-टाइम पर किस कक्षा का उपयोग करना बोझिल है। मुझे शायद एक बूस्ट और ज़ेनोमाई म्यूटेक्स के पूल होना पड़ेगा। क्या यह सबसे कठिन वास्तविक समय सी ++ प्रोग्राम इस मुद्दे को संबोधित करते हैं?

मुझे यह समस्या सिर्फ एक म्यूटेक्स से अधिक के साथ आ रही है लेकिन प्रतिक्रिया प्राप्त करना चाहूंगा क्योंकि मैं शुरुआत से खराब डिजाइन पैटर्न को दोहराना नहीं चाहता हूं।

3) मेरा मानना ​​है कि बेकॉफ से ट्विनकैट विंडोज 7 के तहत रीयल-टाइम में ईथर कैट चलाता है। क्या ऐसा कुछ भी होगा जो शौकिया की पहुंच से बाहर नहीं होगा जो कम से कम एक एनआईसी को वास्तविक वास्तविक समय के साथ समर्थन देता है विंडोज 7 या बाद में? शायद एक ओपन सोर्स हाइपरविजर प्रोजेक्ट है।

4) इसके अलावा, लोग सिस्टम को कैसे लोड करते हैं ताकि उनके क्वाड-कोर कंप्यूटर प्रत्येक कोर का 100% उपयोग कर रहे हों ताकि वे बता सकें कि उनका सिस्टम कठिन वास्तविक समय में नहीं चल रहा है या नहीं?

+1

आपको इसे छोटे, संक्षिप्त प्रश्नों में विभाजित करना चाहिए। यह पचाने के लिए बहुत अधिक है। –

+1

नेटवर्क स्टैक की कौन सी परत टकराव का पता लगाने और बचाव से निर्दिष्ट करती है? मुझे मुश्किल समय लगता है कि सामान्य यादृच्छिक-प्रतीक्षा सीडी/सीए को नियोजित करने वाली प्रणाली हार्ड रीयलटाइम गारंटी कैसे दे सकती है। – dmckee

+2

कुछ भी करने के लिए "कठिन वास्तविक समय" आपको "हार्ड रीयल-टाइम" ओएस की आवश्यकता है। उस श्रेणी में विंडोज या लिनक्स भी नहीं है। –

उत्तर

2

एक विवरण: यदि आप सर्वो के लिए 1khz रीफ्रेश चक्र चाहते हैं, तो आप कठिन वास्तविक समय का उपयोग क्यों कर रहे हैं? सॉफ्ट रीयल-टाइम (यानी रूट के रूप में चलाएं, लेकिन शुद्ध उपयोगकर्ता स्पेस लेकिन उस प्रक्रिया के लिए फीफो स्तर पर शेड्यूलर नीति सेट करें, सब कुछ मेमोरी में लॉक करें, स्वैपस्पेस अक्षम करें ...) और आप आसानी से 1khz को बिना किसी गायब के प्राप्त करेंगे चलने के पूरे वर्ष में संदेश।

इस बिंदु पर, बस अपने ईथरनेट प्रोटोकॉल के लिए कच्चे सॉकेट का उपयोग करें और इसे एक दिन कॉल करें।

इन दिनों हार्डवेयर में असंबंधित प्रश्न ईथरनेट सीडी/सीए लागू किए गए हैं। उन्हें अनदेखा कर दो।

+0

यह नरम वास्तविक समय के साथ शुरू करने में मददगार था। पृष्ठभूमि प्रक्रियाओं को चलाने के दौरान यह आमतौर पर <100 यूएस विलंबता के साथ काम करता है। हार्ड रीयल-टाइम अब काम कर रहा है और आरएननेट के साथ ज़ेनोमाई में लगभग 50 यूएस की ऊपरी सीमा होती है, बिना कर्नेल सेटिंग्स के बहुत tweaking। – Edward