2015-04-29 6 views
7

मैं समझता हूं कि एमआईएसआरए-सी मानकों को एम्बेडेड फ़र्मवेयर के लिए लक्षित किया गया है। जब एम्बेडेड लिनक्स आपका उत्पाद प्लेटफॉर्म होता है, तो क्या आपके एम्बेडेड अनुप्रयोगों को मिसरा-सी अनुपालन के लिए विकसित किया जा सकता है? क्या किसी ने कभी ऐसा अभ्यास माना है?क्या एमआईएसआरए-सी लिनक्स अनुप्रयोगों पर लागू है

मेरा सामान्य अर्थ यह है कि आपको पहले सभी 'नियम' को समझना होगा और फिर उन्हें अपने डिजाइन/कोडिंग चरण में लागू करना होगा। सिस्टम कॉल (pthread_create) और शून्य * जैसे उदाहरण हो सकते हैं जिन्हें अनुपालन में मजबूर होना आवश्यक है - बदसूरत दिखने वाले कोड का उत्पादन करना।

+0

के अनुसार दस्तावेज़ शीर्षक, मिसरा-सी सभी * महत्वपूर्ण प्रणालियों * पर लागू होता है - और उस दायरे से बाहर के किसी भी अनुप्रयोग के लिए उपयोग किया जा सकता है। गैर-एम्बेडेड कोड पर उपयोग किए जाने पर कुछ नियमों (विशेष रूप से सलाहकार) के लिए आपका दृष्टिकोण अधिक आराम से हो सकता है। – Andrew

उत्तर

4

जबकि मिसरा-सी मूल रूप से मोटर वाहन और सुरक्षा-महत्वपूर्ण अनुप्रयोगों के लिए मानक के रूप में बनाया गया था, यह अब सत्य नहीं है। आजकल मिसरा-सी एक सामान्य मानक है जिसका उपयोग किसी भी सी प्रोग्राम के लिए किया जा सकता है जहां बग, क्रैश और पोर्टेबिलिटी के मुद्दे वांछित नहीं हैं।

आपको खुद से पूछना होगा कि आप मिसरा-सी का उपयोग क्यों कर रहे हैं। क्या ऐसा इसलिए है क्योंकि आप इसे बग से छुटकारा पाने के लिए कोडिंग मानक के रूप में उपयोग करना चाहते हैं, या क्योंकि एप्लिकेशन एक मिशन-महत्वपूर्ण प्रकृति का है?

लिनक्स मामले के लिए, मुख्य मुद्दा यह होगा कि यदि आपके पास अपना स्वयं का कोड मिसा अनुपालन होगा, या यदि आप मांग करेंगे कि यह सभी पुस्तकालयों के लिए भी सही है। और लिनक्स कर्नेल + पुस्तकालयों MISRA अनुपालन करने का कोई तरीका नहीं है, आपको स्क्रैच से लिनक्स को फिर से लिखना होगा।

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

3

एक शब्द में: नहीं

मिश्रा कुछ अच्छी दिशा निर्देश प्रदान करता है, लेकिन आप बंद सिर्फ चेरी नियम है जो आप (यह मानते हुए आप अपने निर्माण/स्थिर विश्लेषण में जाँच स्वचालित है पालन करना चाहते हैं उठा बेहतर होगा)।

मिसरा-2004 सामान के माध्यम से स्किमिंग, यहां कुछ समस्याएं हैं।

अपने सभी पुस्तकालयों को मिस्रा अनुपालन होने के नाते, खुद में, मिसरा नियम है। goto, continue और break, समारोह रिटर्न, और सूचक अंकगणित पर

नियम सचमुच दोनों गिरी और यूज़रस्पेस कोड की लाइनों के अरबों में उल्लंघन होता है, तो अच्छी किस्मत अनुपालन के तहत अपने पुस्तकालयों (या कर्नेल) हो रही है।

अन्य सामान्य एपीआई के बीच सॉकेट का उपयोग करते हुए पॉइंटर कास्टिंग नियमों का पालन करना असंभव होगा।

मिश्रा -2004 11.2 रूपांतरण आपत्ति उठाने का एक सूचक के बीच किया नहीं किया जाएगा और किसी भी एक अभिन्न प्रकार के अलावा अन्य प्रकार, एक और सूचक प्रकार या एक सूचक शून्य पर आपत्ति उठाने का।

2004-20.x वर्गों <errno.h>, <stdio.h>, <time.h> और <signal.h> पर प्रतिबंध लगाने। बायनिंग संकेत और त्रुटि जांच बीएडी लिनक्स प्रोग्रामिंग को बढ़ावा देती है यदि आप लंबी चल रही, मजबूत सेवाओं को लिख रहे हैं।

और कोई गतिशील स्मृति आवंटन कहीं भी एक नियम नहीं है।

मैं जानता हूँ कि मिश्रा नियम है कि आप नियमों का उल्लंघन करने के लिए यदि आप उन्हें दस्तावेज़ की अनुमति मिलती है (के लिए आवश्यक या सिर्फ सलाहकार ??? यह सच है), लेकिन आप soooo कई अपवाद है कि यह एक तरह से वास्तव में दस्तावेज़ करेंगे व्यर्थ।

यह सब कहा गया है, अगर आपके पास ग्राहक एमआईएसआरए अनुपालन पर जोर दे रहा है (जो कि मैंने इसे कभी भी देखा है), तो आप शायद अपने सभी नियमों के उल्लंघनों को दस्तावेज कर सकते हैं और खुद को कॉल करने के लिए कुछ हाथ-प्रयास कर सकते हैं मिसा अनुपालन। तो लिनक्स पर एमआईएसआरए अनुपालन करने का नाटक करने के लिए एक व्यावसायिक मामला हो सकता है, लेकिन मुझे इसमें कोई तकनीकी लाभ नहीं दिखता है।

मुझे डर है कि अगर आप सही मायने में पालन करना होगा और एक दिग्गज/पूर्ण विशेषताओं ओएस की जरूरत है आप से बेहतर QNX, GHS अखंडता, VxWorks के लिए आटा बाहर forking रहे करना चाहते हूँ, आदि

+0

पुस्तकालयों को मिसारा अनुपालन होना चाहिए या नहीं, बहस की तरह है। क्योंकि आपको हर जगह लिपिक लिखित पुस्तकालय मिलेंगे, न केवल लिनक्स स्रोत में। यही कारण है कि मुझे लगता है कि पुस्तकालयों को अनदेखा करना ठीक है अगर ओपी सिर्फ मिसरा-सी को अपना कोड सुधारने के लिए चाहता है। सामान्य रूप से लिनक्स प्रोग्रामर को एमआईएसआरए, या एमआईएसआरए का सबसेट अपनाने से फायदा होगा, ताकि वे सीख सकें कि असली कोडिंग मानक कैसा दिख सकता है। यह सोचने के बजाय कि शौकिया-स्तर "लिनक्स कर्नल स्टाइल गाइड" कर्नेल प्रोजेक्ट के बाहर भी अच्छे प्रोग्रामिंग अभ्यास के लिए कैनन का कुछ प्रकार है। – Lundin

+2

आमतौर पर आपको MISRA-C का उपयोग करना पड़ता है क्योंकि "ग्राहकों" की वजह से नहीं है, लेकिन क्योंकि आपको सुरक्षा-महत्वपूर्ण अनुप्रयोगों के लिए उद्योग सुरक्षा मानकों के अनुरूप होना है। आईईसी 61508 (उद्योग/जेनेरिक), आईएसओ 26262 (मोटर वाहन), डीओ-178 (एवियनिक्स) और इसी तरह। ये मानकों की मांग है कि आप स्थिर कोड विश्लेषण के साथ भाषा के एक सुरक्षित सबसेट का उपयोग करते हैं, जिससे आपको चुनने के लिए बस मिसरा-सी और स्पार्क एडा के साथ बहुत कुछ छोड़ दिया जाता है। लेकिन यह देखते हुए कि कम से कम 61508 और 26262 और अन्य सभी एसआईएल मानकों को ज्यादातर बकवास से भरा जाता है, मुझे लगता है कि यह अंत में "ग्राहक जोर देकर" उबाल सकता है :) – Lundin

+1

अधिकांश एमआईएसआरए आवश्यकताएं विकासशील सॉफ्टवेयर के आसपास आधारित हैं जो निर्धारक के रूप में है सभी परिचालन स्थितियों के तहत संभव है। आप उसी कारण से 'malloc' का उपयोग नहीं कर सकते हैं, एआरआईएनसी -428, और एमआईएल-एसटीडी -1553 (आमतौर पर) सिंक्रोनस (आईपी के मूल रूप से async की तुलना में) हैं। नियतिवाद। गारंटीकृत निर्धारण दृढ़ संकल्प हार्ड रीयलटाइम सिस्टम (विशेष रूप से मिशन या सुरक्षा महत्वपूर्ण लोगों) में सबसे अधिक चिंता का विषय है, लेकिन अक्सर समग्र सिस्टम प्रदर्शन के लिए * हानिकारक * है और इसलिए सामान्य उद्देश्य ओएस में नहीं है। –

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