MCU प्रोग्रामिंग के लिए आरटीओएस बनाम नंगे धातु के लाभ?


11

कृपया ध्यान दें: इस प्रश्न में विशेष रूप से दो RTOSes का उल्लेख किया गया है, लेकिन अधिक सामान्य है और संभवतः किसी भी व्यक्ति द्वारा उत्तर दिया जा सकता है जिसने पहले एम्बेडेड RTOS के लिए C कोड लिखा है, और उनका सॉफ़्टवेयर सीधे MCU पर चला था।

मैं एम्बेडेड RTOSes के बारे में अधिक जानने और उनके लिए एप्लिकेशन लिखने में रुचि रखता हूं। मैं वर्तमान में Embox और RIOT देख रहा हूँ क्योंकि वे खुले स्रोत, आधुनिक, सक्रिय हैं और लगता है कि उनके पास उत्कृष्ट दस्तावेज़ हैं। मेरे लक्ष्य के दो चरण हैं: चरण 1 यह पता लगाना है कि इन OSes को MCU (शायद AVR या ARM) में कैसे संकलित और फ्लैश किया जाए। चरण 2 के बाद एक साधारण सी प्रोग्राम (मूल रूप से एक हेडलेस डेमन) लिखना है, जो समय के साथ "शौक ऐप" के रूप में विकसित होगा। मैं फिर उसी MCU में इस प्रोग्राम को फ्लैश / परिनियोजित करूंगा, जिससे Embox / RIOT से युक्त एपस्टैक को सफलतापूर्वक तैनात किया जा सके और इसके शीर्ष पर मेरा ऐप रहता हो।

इससे पहले कि मैं किसी भी तरह की सड़कों पर जाऊं, जो अंत में मृत समाप्त होती हैं, मैं इस लेख को ठोकर मारता हूं जो यह समझाने का एक बहुत अच्छा काम करता है कि वास्तविक समय के ऐप्स, सी / असेंबलर में लिखे गए और एमसीयू में कैसे भेजे गए, क्या वास्तव में उनके नीचे RTOSes की आवश्यकता नहीं है ।

इसलिए अब मैं वास्तव में भ्रमित हूं, और कंप्यूटिंग सिद्धांत के बारे में मेरी मूलभूत समझ पर सवाल उठा रहा हूं। मुझे लगता है कि मैं पहले भी Embox / RIOT का उपयोग करने या न करने का निर्णय लेने की कोशिश कर रहा हूं:

  • पाठ्यक्रम पर रहें और ओएस + ऐप के एमसीयू पर "ऐप स्टैक" के साथ जाएं; या
  • लेख की चेतावनी पर ध्यान दें और केवल MCU के साथ मेरे ऐप "नंगे धातु" को चलाएं

जाहिर है, पूर्व अधिक काम है, और इसलिए उस मार्ग पर जाने के लिए एक अच्छा कारण / भुगतान था। इसलिए मैं पूछता हूं: इन (और समान) एम्बेडेड आरटीओएस को एमसीयू / सी ऐप डेवलपर्स के लिए वास्तविक लाभ क्या हैं ? आरटीओएस का उपयोग करके (शायद पहिया को सुदृढ़ नहीं करके?) मेरी सी ऐप से क्या विशिष्ट सुविधाएँ प्राप्त हो सकती हैं? RTOS को खोदकर और नंगे धातु के जाने से क्या खो जाता है?

मैं यहाँ ठोस उदाहरण के लिए पूछ रहा हूँ, जब आप RTOSO ;-) के लिए विकिपीडिया प्रविष्टि पर जाते हैं तो मीडिया प्रचार नहीं करता है;


3
यदि यह आपके लिए भी स्पष्ट नहीं है कि RTOS क्या प्रदान करता है, तो आप उनके लिए आवेदन लिखने में क्यों रुचि रखते हैं? आरटीओएस आपको लाभान्वित करेगा या नहीं यह पूरी तरह से इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं। इसके साथ ही कहा कि, चलने से पहले आपको चलना सीखना चाहिए। नंगे धातु के लिए कार्यक्रम, और जैसा कि आप समस्याओं में भाग लेते हैं और उन्हें हल करते हैं, आप वास्तव में सीखेंगे कि लाभ और कमियां क्या हैं।
whatsisname

धन्यवाद @whatsisname (+1) - यह ध्वनि की सलाह है और मैं संभवतः आपको इस पर ले जाऊंगा। मुझे नहीं लगता कि इसके फॉक्स पेस हालांकि, अभी भी आरटीओईएस की पेशकश में दिलचस्पी रखते हैं, भले ही मैं महीनों / वर्षों से उनकी ज़रूरत से बाहर हूं। मुझे लगता है कि मैं 30,000 फीट के दृश्य पर पूरी तस्वीर को सामने देखना चाहता हूं। एक बार फिर धन्यवाद!
स्माइब

जवाबों:


11

माइक्रोकंट्रोलर कार्यक्रमों में कई कार्य होते हैं । मान लीजिए कि आप एक कंप्यूटर नियंत्रित टेलीस्कोप माउंट बनाना चाहते थे। कार्य होंगे:

  • USB सीरियल बफ़र से इनपुट का एक नया बाइट पुनर्प्राप्त करें।
  • जाँच करें कि क्या हमें पूरी कमांड मिली है।
  • यदि हां, तो उस कमांड को निष्पादित करें।
  • वर्तमान दूरबीन स्थिति के लिए सेंसर पढ़ें।
  • मोटर्स के अगले चरण को नियंत्रित करने के लिए उचित आउटपुट सेट करें।

यह उन चीज़ों के लिए काफी विशिष्ट सेट है, जिनके लिए आप एक माइक्रोकंट्रोलर का उपयोग करेंगे, और एक अनंत लूप के साथ प्रबंधन करना बहुत आसान है:

while(TRUE) {
  uint8_t input = readUsbBuffer();
  parseCommand(input);
  readSensors();
  setMotors();
}

यदि आप सुविधाएँ जोड़ना और जोड़ना जारी रखते हैं, तो आप अंततः उन सामान्य समस्याओं के बारे में जानने लगते हैं, जिनके लिए आप सार बनाना चाहते हैं, जैसे:

  • आपका बफ़र ओवरफ्लो हो रहा है, इसलिए आप यह सुनिश्चित करना चाहते हैं कि कार्य ओवरफ्लो होने से पहले अन्य कार्यों को बाधित कर सकता है।
  • जब कुछ भी जरूरी न हो तो आप सोने से बैटरी बचाना चाहते हैं।
  • आप यह सुनिश्चित करना चाहते हैं कि सभी कार्यों को एक उचित शॉट मिले। यदि readSensorsबहुत लंबा समय लगता है, तो आप इसे बाधित करने और बाद में वापस आने में सक्षम होना चाहते हैं।
  • आप दूसरों को प्रभावित किए बिना केवल एक कार्य को रीसेट करने में सक्षम होना चाहते हैं।
  • आप एक कार्य में स्मृति रिसाव या अन्य बग चाहते हैं ताकि अन्य कार्यों को बाहर न किया जा सके।
  • आप विभिन्न कार्यों को अलग-अलग प्राथमिकता देने में सक्षम होना चाहते हैं।
  • आप एक अविश्वसनीय कार्य को सैंडबॉक्स करने में सक्षम होना चाहते हैं।
  • आप विभिन्न दरों पर कार्यों को निष्पादित करने में सक्षम होना चाहते हैं। शायद आपके सेंसर केवल 10 बार प्रति सेकंड पढ़ा जा सकता है, लेकिन आप प्रति सेकंड 100 बार एक मोटर कदम को निष्पादित करना चाहते हैं।

इन वस्तुओं में से एक या दो को मैन्युअल रूप से अपेक्षाकृत आसानी से संभाला जा सकता है। यदि आपके पास इस प्रकार की समस्याएं अक्सर पर्याप्त होती हैं जो आप उन्हें पुस्तकालयों में सामान्यीकृत करना शुरू करते हैं, तो आपने मूल रूप से एक आरटीओएस को फिर से मजबूत किया है। यदि आपके प्रोग्राम का टास्क मैनेजमेंट पर्याप्त जटिल है, भले ही आप ऑफ-द-शेल्फ आरटीओएस का उपयोग न करें, तो आप अंततः एक खराब रीइन्वेंटिंग को समाप्त कर देंगे।

हालांकि, मेरे अनुभव में, जिस लाइन पर आप आरटीओएस चाहते हैं, वह लाइन उस जगह के बहुत करीब है जहां आप माइक्रोकंट्रोलर के बजाय एक माइक्रोकंट्रोलर चाहते हैं। यदि आप अपने फ़र्मवेयर को उस कॉम्प्लेक्स के होने का अनुमान लगाते हैं, तो आमतौर पर माइक्रोप्रोसेसर मार्ग को शुरू से जाना बेहतर होता है।


यह एक उत्कृष्ट विश्लेषण है और वास्तव में यह मेरे लिए स्पष्ट है। आप जो कहते हैं, मैं उससे सहमत हूं, लेकिन मैं @Atsby के जवाब से अधिक सहमत हूं। खासकर यदि लक्ष्य मेरे स्वयं के कौशल को सीख / सुधार रहा है। एक उत्पादन प्रणाली में, शायद एक COTS उत्पाद या RTLinux के साथ बेहतर है, लेकिन उस उत्पाद को निम्न स्तर डिबग करने में सक्षम होने के लिए जब कुछ गलत हो जाता है, तो मुझे व्यक्तिगत रूप से कुछ कोड लिखना होगा जो उस सूची में कई बार होता है मुमकिन।
सैम हम्मामी

7

मैंने ARM कॉर्टेक्स-M0 के लिए अपनी खुद की को-ऑपरेटिव मल्टी-थ्रेडिंग लाइब्रेरी लिखी।

यह मुश्किल से कोड के एक दो पृष्ठ थे, और इसके पहले संस्करण को लिखने और डिबग करने के लिए एक दिन से अधिक समय नहीं लगा।

रोल-ऑफ-ओन का बड़ा फायदा यह है कि आप कोड जानते हैं और आप इसे उन चिप पर पोर्ट कर सकते हैं जो आरटीओएस सपोर्ट नहीं कर सकते। इसके अलावा, आप प्रश्नों के बारे में सोचने में कम समय व्यतीत करते हैं जैसे "क्या यह दुर्घटना ए और बी को एक साथ उपयोग करने की कोशिश करेगा?" चूंकि आपने कोड लिखा था, आप इसका जवाब जानते हैं।

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


धन्यवाद @Atsby! इस उत्तर ने मुझे यह तय करने में वास्तव में मदद की कि क्या यह बरेली धातु में और जानने के लिए समय के निवेश के लायक है। मैंने लिखा है कि पाई के लिए नंगे धातु में एक GPIO लाइब्रेरी में क्या मात्रा है, और मुझे लगता है कि अब इसे एक या दो कदम आगे ले जाने का समय है। धन्यवाद!
सैम हम्मामी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.