2008-09-22 10 views
8

एक छोटी एम्बेडेड सिस्टम प्रोजेक्ट पर हमारे पास कुछ कोड है जिसे हम थ्रेड में चलाना चाहते हैं ताकि हम एक एम्बेडेड आरटीओएस (ईकोस) के शीर्ष पर निर्माण करने का चुनाव कर रहे हों।क्या यह एक आरटीओएस और चक्रीय कार्यकारी मिश्रण करने के लिए समझ में आता है?

पहले, हमने मुख्य() में एक चक्रीय कार्यकारी का उपयोग किया है जो प्रत्येक राज्य मशीन के रूप में लागू कार्यों को चलाता है। कुछ कार्यों के लिए हमें उन समस्याओं का सामना करना पड़ा जहां कार्य को कई अच्छे अनाज वाले राज्यों में तोड़ने की आवश्यकता होगी जिससे कोड अतिरिक्त जटिल हो सके।

किसी आरटीओएस पर स्विच करते समय हमें पता चला कि प्रत्येक धागे के ढेर के लिए मेमोरी उपयोग तेजी से बढ़ता है यदि हम प्रत्येक अलग कार्य को अपना स्वयं का धागा देते हैं। (हमारे पास केवल 64k है और हमारे संचार बफर के लिए स्मृति की आवश्यकता है)

हम अपने संचार कार्य और चक्रीय कार्यकारी के लिए एक अन्य धागे के लिए एक ट्रेड का उपयोग करने पर विचार कर रहे हैं। चक्रीय कार्यकारी अन्य तार्किक कार्यों को चलाएगा।

क्या ऐसा आरटीओएस और चक्रीय कार्यकारी को मिश्रण करने के लिए समझ में आता है?

उत्तर

6

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

कार्यों को केवल एक विभाजन तंत्र के रूप में सोचें जो आपको अपने डिज़ाइन को सरल बनाने की अनुमति देता है।

0

यह एक वैध डिजाइन है, लेकिन मुझे लगता है कि मुझे ओएस रखने का कारण याद आया।

ओएस की कौन सी सुविधाएं आप उपयोग करने की योजना बना रहे हैं?

उपलब्ध जानकारी से ऐसा लगता है कि आप कार्यों की जटिलता को अपने नए मुख्य पाश पर ले जायेंगे।

+0

प्रीपेप्टिव थ्रेडिंग क्षमता हमें संचार कार्य में अत्यधिक जटिल राज्य मशीन बनाने से बचने की अनुमति देती है। संचार भाग के लिए धागा होने से कोड बहुत सीधे आगे है। यदि हमने इसे हर बिंदु पर एक राज्य में तोड़ दिया है जिसमें वर्तमान में नींद (1000) प्रकार का ब्लॉक है, तो कोड मूल रूप से बहुत छोटे राज्यों का स्पेगेटी कोड गड़बड़ होगा। यह किया जा सकता है, हालांकि, हम कोड को स्वच्छ और रखरखाव रखने के बजाय रखेंगे। अन्य राज्य मशीन सरल से कुछ हद तक जटिल होती है (एक में ~ 15 राज्य होते हैं)।संचार राज्य मशीन और भी सह होगा – JeffV

2

हां, एकाधिक ओएस थ्रेड चलाने वाले एक ओएस थ्रेड में चक्रीय कार्यकारी होने से समझ हो सकती है। असल में जब तक कि दो कार्य शेड्यूलिंग आवश्यकताओं के साथ संघर्ष नहीं करते हैं (किसी को ब्लॉक करने की आवश्यकता होती है, एक दूसरे की तुलना में अधिक प्राथमिकता होती है और कम प्राथमिकता वाले को निष्पादित करने में लंबा समय लगता है), मैं उन्हें एक ही धागे में रखने की सलाह दूंगा।

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

1

यदि आप look at FreeRTOS, वे वास्तव में एक और अनुसूचक एक कार्य में, एक तरह से चलाने :)

और दूसरों को प्रतिध्वनित करने के, कुछ भी डिजाइन में गलत लग रहा है। यदि कोई तरीका व्यक्त करने का स्पष्ट तरीका है तो कोई कारण नहीं (कुछ) आपके कार्य राज्य मशीन नहीं हो सकते हैं।