एंबेडेड कड़ाई से C / C ++ [बंद] क्यों है


15

मुझे यह प्रश्न पसंद नहीं आया क्योंकि इसका उत्तर आसानी से नहीं दिया जा सकता है, लेकिन शायद मैं इस बात को दोहरा सकता हूं: "क्या बदलती भाषाओं से एंबेडेड रहता है?"

उदाहरण के लिए, हम बहुत ज्यादा सी / सी ++ को एम्बेडेड के लिए देखते हैं (मुझे लगता है कि मैंने पहले भी एडीए का उल्लेख सुना है? मुझे गलत मानें तो सही करें)

लेकिन वास्तव में एंबेडेड दुनिया को बदलती भाषाओं से क्या रखता है? क्या यह सिर्फ इतना है कि सी का उपयोग करना बहुत आसान है या सी में बदलाव के लिए वास्तव में "आवश्यकता" नहीं है क्योंकि सी सब कुछ ठीक करता है?

यह हमेशा थोड़े मुझे परेशान कर रहा है, न कि शिकायत करने वाला। चूंकि इसे कुछ भाषाओं में रखने से चीजें मानकीकृत होती हैं। लेकिन फिर भी सवाल बना हुआ है।

मुझे लगता है कि यह एक विशेषण प्रश्न की तरह है, हालांकि मेरा मुख्य प्रश्न "क्यों" है और "IF / WHEN" नहीं है


2
क्या कोई विशेष उच्च स्तरीय भाषा है जिसे आप एम्बेडेड सिस्टम पर देखना चाहेंगे? संपादित करें: या यों कहें कि आप जिस भाषा में रुचि रखते हैं, उसे C प्रदान नहीं करता है?
जॉन एल

1
@JonL - लो-लेवल फीचर्स का एक गुच्छा है जो मैं चाहता हूं कि C था। ईजी बेहतर बिट / कुतरना / बाइट / शब्द हेरफेर बड़े इनट्स के अंदर। बेहतर सुरक्षा समर्थन, जैसे कि Ada में सुविधाओं के प्रकार हैं।
रॉकेटमेग्नेट

3
एंबेडेड कड़ाई से सी नहीं है। यहां एम्बेडेड सिस्टम के लिए उच्च स्तरीय भाषाओं का एक समूह है: Electronics.stackexchange.com/questions/3423/…
Kellenjb

1
"एंबेडेड" के अलग-अलग अर्थ हैं। एक टोस्टर चलाने वाला 4-बिट माइक्रोकंट्रोलर एक ईसीयू या सेट टॉप बॉक्स के लिए अलग है। यह स्पेक्ट्रम आपके प्रश्न का उत्तर देने में कठिन बनाता है।
टॉबी जाफ़े

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

जवाबों:


18

सबसे पहले: "एम्बेडेड" के बारे में भूल जाओ क्योंकि यह एक उपयोगी भेद नहीं है। सभी महत्वपूर्ण संपत्ति "संसाधन-विवश" है। सबसे महत्वपूर्ण संसाधन अक्सर समय होता है, जिस स्थिति में हम वास्तविक समय प्रणालियों के बारे में बात करते हैं, लेकिन यह स्मृति या शक्ति भी हो सकती है।

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

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

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


+1 - अच्छा जवाब। एडा एक दिलचस्प भाषा लगती है, क्या छोटे माइक्रो के लिए कोई एडीए कंपाइलर हैं?
ओली ग्लेसर

GNAT है, GCC Ada कंपाइलर है। लेकिन AFAIK का उपयोग माइक्रोस पर बहुत अधिक नहीं किया गया है, इसलिए आपके पास एक मुश्किल समय होगा जो कुछ पढ़ने के लिए है।
राउटर वैन Ooijen

हां मैंने जीएनएटी को विकी पृष्ठ पर उल्लेखित देखा। आप सही हैं, छोटे माइक्रो के लिए ज्यादा नहीं, लेकिन वहाँ 68k, x86, MIPS, आदि (जैसे डीडीसीआई ) पर मिशन महत्वपूर्ण सामान के लिए समर्थन का एक उचित बिट (जैसा कि आप अपेक्षा करेंगे) प्रतीत होता है
ओली ग्लेसर

मुझे लगता है कि स्पार्क आद्या भी है, जैसा कि नीचे डीके ने उल्लेख किया है। मैं इसे बाहर की जाँच करने के लिए जब मैं उस मायावी सामान वे समय कहते हैं में से कुछ है ...
ओली ग्लेसर

2
Ada, Gnat के रूप में, AVR माइक्रोप्रोसेसर पर ठीक काम करता है, जैसा कि Arduino में देखा गया है। सबसे छोटा Gnat निष्पादन योग्य मैंने बनाया है 65 बाइट्स। बेशक यह सब किया था एक एलईडी झपकी थी, हालांकि बराबर Arduino स्केच 1K से अधिक था। जब तक मेरा निष्पादन योग्य 600 बाइट्स तक पहुंच गया, यह 2 स्टेपर मोटर्स को स्वतंत्र रूप से चला रहा था ... आपको स्पार्क की आवश्यकता नहीं है - जब तक आप साबित नहीं करना चाहते कि आपका एलईडी ब्लिंकर औपचारिक रूप से सही है!
ब्रायन ड्रमंड

9

8 और 16-बिट माइक्रोकंट्रोलर्स आधारित एम्बेडेड सिस्टम के साथ, यह नीचे आता है सॉफ्टवेयर विकसित करना आसान है जो इन बेहद मामूली भंडारण सीमाओं के सीमित संसाधनों में फिट हो सकता है (शायद कम-अंत 8-बिट माइक्रोकंट्रोलर्स के लिए कुछ 100 बाइट रैम है , रोम या EPROM / कोड भंडारण के लिए फ्लैश के 2-8 KiB के साथ)।

उन मामलों में C या असेंबली जैसी छोटी भाषाएँ सबसे अधिक इस्तेमाल की जाने वाली विकास भाषाएँ हैं। एक बहुत ही मोटे रिश्तेदार तुलना के रूप में, एक पूर्ण कोडांतरक और C99 संकलक एक एकल फ़्लॉपी डिस्क पर फिट हो सकते हैं, जबकि आपको आधुनिक C ++ विकास प्रणाली (STL, आदि के लिए) के लिए कई MiB की आवश्यकता होती है।

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

असेंबली और सी में यह अनुमान लगाना संभव है कि कितनी मेमोरी का उपयोग किया जा रहा है, ताकि एक स्पेस कंस्ट्रिक्टेड डिज़ाइन संभव हो, लेकिन एडवांस्ड फीचर्स जैसे टेम्प्लेट, अपवाद हैंडलिंग और रन-टाइम बाइंडिंग के लिए आवश्यक मेमोरी फ़ुटप्रिंट को ठीक से जानना असंभव हो जाता है अग्रिम में एक मानक सी ++ प्रोग्राम के लिए। मुझे इस बारे में टिप्पणी करने के लिए MISRA C ++ के बारे में पर्याप्त जानकारी नहीं है , जो C ++ का सबसेट है।

बाईट-कोड (जावा, पर्ल, पायथन) चलाने वाली आभासी मशीनों पर आधारित भाषाएं एम्बेडेड डेवलपर के अनुभव में कम परिपक्व होती हैं, और जैसा कि इन भाषाओं को प्रोग्रामर को विशेष हार्डवेयर से इंसुलेट करने के लिए डिज़ाइन किया गया है, यह भी विवेक का होना अधिक कठिन बनाता है। ऐसे एम्बेडेड हार्डवेयर सिस्टम की सीमाएं और प्रतिबंध। ये MiB के साथ तेज़ 32-बिट प्रोसेसर (उदाहरण के लिए ARMv7) के साथ एक समस्या से कम नहीं है अगर RAM का GiB नहीं है।

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

मुझे आशा है कि व्यापक स्ट्रोक में कारण आप सी और असेंबली को मुख्य रूप से छोटे या पुराने एम्बेडेड सिस्टम पर उपयोग करते हैं, और नए मध्य से उच्च अंत एम्बेडेड सिस्टम की सीमाओं के साथ पारंपरिक डेस्कटॉप पर्सनल कंप्यूटर से केवल थोड़ा भिन्न होंगे।


5

अधिकांश जवाब पहले से ही ऐतिहासिक कारणों (अच्छी तरह से ज्ञात है, हर कोई इसका उपयोग करता है, आदतों को बदलना आसान नहीं होगा, आदि)। जबकि मैं उनसे सहमत हूं, हमें ध्यान रखना चाहिए कि एक और महत्वपूर्ण कारण है।

ऐसा नहीं है कि "C एक बुरी या पुरानी पसंद है लेकिन हम अभी भी इसे आदत से बाहर करते हैं" (QWERTY कीबोर्ड की तरह)।

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

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

  • यह विधानसभा की तुलना में तेज़ और कोड के लिए आसान होने के लिए पर्याप्त उच्च स्तर है।

तो, सी असेंबली की गति और प्रत्यक्ष हार्डवेयर पहुंच और उच्च स्तरीय भाषाओं की आसान पढ़ने और समझने के बीच सबसे अच्छा (या सर्वश्रेष्ठ में से एक) समझौता है।


1
मुझे लगता है कि सी के पक्ष में एक प्रमुख पहलू यह है कि यह किसी विशेष प्लेटफॉर्म के लिए कोड को अनुकूलित करने की अनुमति देता है, जबकि इस तरह के कोड को चलाने की अनुमति देता है (शायद उतना कुशलता से नहीं)। PIC की तरह कुछ पर, कई सी निर्देश मशीन के निर्देशों में काफी हद तक अनुवाद करेंगे; जैसा लूप unsigned char i=63,j=128; do {something;} while(--j); while(--i);होगा unsigned int i=16000; do {something;} while(--i);, उतना पठनीय नहीं होगा , लेकिन यह तेजी से चलेगा और PIC पर अधिक कुशल होगा। यदि कोड को एआरएम में स्थानांतरित कर दिया गया था, तो दूसरा दृष्टिकोण अधिक कुशल होगा, लेकिन पहला अभी भी काम करेगा।
सुपरकैट

4

यह वास्तव में यही कारण है कि नियमित प्रोग्रामिंग में (सबसे अधिक इस्तेमाल की जाने वाली) भाषाएं (वास्तव में) बदलती नहीं हैं:

  1. मौजूदा कोड की बड़ी राशि (पुस्तकालय / मौजूदा कार्यान्वयन)
  2. बड़ा उपकरण सेट जो इन भाषाओं के साथ काम कर सकता है (IDEs, सिमुलेटर, ...)

4

एम्बेडेड दुनिया में, सॉफ़्टवेयर अपडेट प्रदान करना बहुत कठिन (या असंभव) हो सकता है, और इसलिए शुद्धता की गारंटी देने के लिए यह सभी अधिक महत्वपूर्ण है। दुख की बात है कि सी इस संबंध में बहुत कम मदद प्रदान करता है, और प्रोग्रामर को तेज और ढीले खेलने की अनुमति देता है।

यह मुझे एम्बेडेड सिस्टम के लिए सी का उपयोग करने के लिए परेशान करता है, और काश मैं कम से कम सी ++ तक बढ़ सकता था, क्योंकि यह कई बाधाओं जैसे कि कॉन्स्ट, संदर्भ, स्ट्रिंग टाइपिंग, आदि के रूप में प्रदान करता है।

मुझे लगता है कि उत्तर केवल यह है कि हम सी के साथ फंस गए हैं क्योंकि बदलना व्यावसायिक रूप से व्यवहार्य नहीं है। हर कोई जानता है कि सी, इसके लिए कंपाइलरों का भार है, इसके लिए पुस्तकालयों और इसे उत्पन्न करने के लिए उपकरण हैं। एक नई भाषा के साथ, हम स्क्रैच से शुरू करेंगे।

मुझे लगता है कि लोग अभी भी PHP का उपयोग क्यों करते हैं

PHP डबल पंजा हथौड़ा।


यदि आप सवाल का उपयोग टिप्पणियों या मेटा पर चर्चा करना चाहते हैं, यदि आप एक अच्छे प्रश्न के लिए उपयोगकर्ता को पीठ पर थपथपाना चाहते हैं, तो इसे टिप्पणी या टिप्पणी दें।
कोर्तुक

आप हमेशा पास्कल का उपयोग कर सकते हैं - ऐसा लगता है कि आपके द्वारा जोड़ी गई सीमाएं :-) हैं। या सुपर-लिंट का कुछ रूप।
रसेल मैकमोहन

2
C के लिए एक बहुत महत्वपूर्ण कारण यह है कि C ++ कंपाइलर की तुलना में बेसिक C कंपाइलर लिखना आसान है। इससे पहले कि मैं कुछ महत्वपूर्ण कामों से मुझे दूर कर लेता, मैंने कुछ समय के लिए काम किया। मजेदार चीजें! एक सी + + संकलक लेखन? ओह। मैं एक उपयोगकर्ता के रूप में C ++ को पसंद करता हूं, हालांकि।
डार्रोन

1
@RussellMcMahon - मैं पास्कल का उपयोग नहीं कर सकता, क्योंकि मेरे द्वारा उपयोग किए जा रहे MCU के लिए कोई पास्कल संकलक नहीं है।
रॉकेटमैग्नेट

@ डारोन - यह एक बहुत अच्छा बिंदु है। हालांकि, बहुत अच्छे ओपन सोर्स सी ++ कंपाइलर हैं, जैसे जीपीपी। उन्हें बस इसके लिए बैक एंड लिखने की जरूरत होगी।
राकेट

4

क्या किसी ने यहाँ SPARK Ada के बारे में नहीं सुना है?

यह एडा भाषा और एम्बेडेड सिस्टम के लिए संबंधित विकास उपकरण, जैसे एविओनिक्स और चिकित्सा उपकरणों जैसे अन्य सुरक्षा-महत्वपूर्ण अनुप्रयोगों का एक "छोटा" संस्करण है।

अधिक विश्वसनीय स्पार्क कोडिंग के साथ C / C ++ की तुलना में अध्ययनों में प्रसंस्करण गति में केवल 5-10% की कमी देखी गई है।

मुझे लगता है कि एम्बेडेड सिस्टम में C का प्रसार आर्थिक कारणों से है:

  • यह पहले से ही वहां है और आमतौर पर अधिकांश अनुप्रयोगों के लिए व्यावहारिक है - और वॉल्यूम के आधार पर अधिकांश एप्लिकेशन गैर-महत्वपूर्ण हैं, कोई भी मर नहीं जाएगा यदि वाशिंग मशीन ओवररन करता है - तो परिवर्तन क्यों?

  • स्पार्क टूलसेट अपने आप में एक अतिरिक्त खर्च होने जा रहा है और प्रशिक्षण कर्मचारियों के लिए इसका उपयोग करना है।

  • एम्बेडेड नियंत्रक / प्रबंधन प्रणाली के लिए स्पार्क (या अन्य गैर-सी भाषाओं) के अतिरिक्त लाभ उपभोक्ता की आंखों में उत्पाद की कीमत में आवश्यक प्रीमियम का औचित्य साबित करने के लिए पर्याप्त नहीं हो सकते हैं - खासकर जब वे जाहिरा तौर पर "अच्छे" प्रतिद्वंद्वी ब्रांडों की बिक्री करते हैं कम कीमत के लिए।

  • AdaCore कंपनी बड़े बाजार अनुप्रयोगों में बहुत गहराई तक नहीं जाने के लिए सावधान है क्योंकि ये गैर-प्रमुख मुद्दों से निपटने के लिए तकनीकी सहायता स्टाफ में एक बड़ी वृद्धि की मांग करेंगे। AdCore एक उच्च-स्तरीय विशेषज्ञता वाली कंपनी है, जो खुद को इस तरह से ढालती है और अपने उत्पादों और सेवाओं को उच्च प्रौद्योगिकी कंपनियों में पेश करती है। किसी भाषा के लिए नए बाजारों में घुसना असामान्य है जब तक कि उसके मुख्य हितधारक वास्तव में नहीं चाहते।

तो, @ Wouter, आपको Ada एम्बेडेड कोड की चाह में मरने की चिंता नहीं करनी चाहिए!

यह पहले से ही कई वर्षों के लिए हवाई जहाज प्रणालियों में है। इसी तरह अपने पेसमेकर के लिए।

लेकिन डिशवॉशर के लिए, बिल्डिंग सर्विसेज कंट्रोल सिस्टम, लैब फर्नेस कंट्रोलर और अन्य नहीं तो कड़ाई से विनियमित एरेनास - क्या यह आर्थिक रूप से अतिरिक्त मील जाने लायक है?


दिलचस्प है, धन्यवाद - मैंने स्पार्क के बारे में नहीं सुना है, इसकी जांच करेंगे।
ओली ग्लेसर

कुछ अध्ययन सी में एक मौजूदा एप्लिकेशन के सापेक्ष गति-अप दिखाते हैं - "आयरनसाइड्स" डीएनएस सर्वर को देखें ...
ब्रायन ड्रमंड

3

मुझे लगता है कि सी की लोकप्रियता का मुख्य कारण यह है कि पहला: सी लोकप्रिय है और कई लोग इसे जानते हैं और दूसरा: जावा, सी # जैसी नई लोकप्रिय भाषाओं में से कोई भी और सी ++ के कई पहलू एम्बेडेड कार्य के लिए उपयुक्त हैं। मूल रूप से जिन 3 अन्य भाषाओं का मैंने उल्लेख किया है, वे गतिशील मेमोरी पर बहुत अधिक भरोसा करते हैं, जो इसके साथ प्रोग्राम के गैर-नियतकालिक निष्पादन को लाती हैं, ऑब्जेक्ट, जो उनके साथ डायनेमिक मेमोरी लाते हैं, बड़ी मेमोरी आवश्यकताएं (चूंकि ओओ के अधिक महत्वपूर्ण पक्षों में से एक का उपयोग होता है) बड़ी संख्या में कक्षाएं), बस संकलन में बढ़ती लोकप्रियता (और कई एम्बेडेड प्लेटफॉर्म भी अपने स्वयं के सी कोड को बिल्कुल भी संकलित नहीं कर सकते ...

इस तथ्य में भी है कि कई पुस्तकालय जो जावा या सी # कहते हैं, बड़ी संख्या में एम्बेडेड परियोजनाओं के लिए बेकार हैं।

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

फोरट्रान के रूप में, अच्छी तरह से मुझे लगता है कि यह एक आला क्षेत्र में चला गया है और ज्यादातर इंजीनियरों और वैज्ञानिकों द्वारा उन क्षेत्रों में काम किया जाता है जहां इसके उपयोग के लिए उपयुक्त पारिस्थितिकी तंत्र है। मुझे कोई विशेष कारण नहीं दिखता (पास्कल और बेसिक के लिए मेरे द्वारा बताए गए अन्य के अलावा) इसका उपयोग एम्बेडेड सिस्टम पर नहीं किया जाता है।

ध्यान दें कि इस उत्तर में मैंने ज्यादातर छोटी प्रणालियों पर ध्यान केंद्रित किया। कई एम्बेडेड डिवाइस भी हैं जो अधिक जटिल ऑपरेटिंग सिस्टम का उपयोग करते हैं जैसे कि जीएनयू / लिनक्स या कुछ अन्य यूनिक्स व्युत्पन्न और उन्हें प्रोग्रामिंग करने के लिए, अधिक या कम किसी भी पोपुलर भाषा का उपयोग किया जा सकता है।


1
C लोकप्रिय है क्योंकि C लोकप्रिय है? :-)
स्टीवनव जूल 5'12

2
@stevenvh हां, यह सच है। यह एक तरह का पॉजिटिव फीडबैक लूप है। यह जितना लोकप्रिय है, उतना ही लोकप्रिय भी है।
आंद्रेजाको

3

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

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

C ++, C के शीर्ष पर स्रोत-कोड अनुवाद परत के रूप में लागू हो सकता है (वास्तव में मूल रूप से), जिसका अर्थ है कि आप अपने C कंपाइलर के साथ C ++ (या इसका कम से कम कुछ संस्करण) मुफ्त में प्राप्त कर सकते हैं।

C और C ++ के साथ, आप अपने नए चिप के लिए जरूरी हर चीज को बूटस्ट्रैप करते हैं, जिससे इसे शुरू करने के लिए तार्किक जगह मिलती है।


3

कुछ कारण जिनका दूसरों ने उल्लेख नहीं किया है:

  • समस्या स्थान: C छोटे और सरल सिस्टम के लिए उपयुक्त है। यदि आप सभी बाहरी संकेतों पर प्रतिक्रिया करते हैं और कुछ संख्याओं को चारों ओर धकेलते हैं तो C अच्छी तरह से काम करता है (कोई जटिल डेटा संरचनाएं, कोई मॉलोक, कोई जटिल त्रुटि से निपटने)।

  • उत्पादन की मात्रा: यदि आपके पास बड़े उत्पादन रन हैं, तो प्रत्येक हार्डवेयर इकाई को बचाने और प्रोग्रामर पर अधिक खर्च करने के लिए आर्थिक रूप से समझदार है, क्योंकि प्रोग्रामिंग एक बार की लागत है।


2

मुझे लगता है कि ऐसा इसलिए है क्योंकि C / C ++ सबसे निचले स्तर की, उच्च स्तरीय भाषाएं हैं।


1

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

असेंबली के अलावा, C एकमात्र ऐसी भाषा है जो मुझे पता है कि मूल कोड के लिए संकलित है और जिसके लिए रनटाइम वैकल्पिक है। तो यह प्रतिबंधित वातावरण में सबसे छोटा पदचिह्न और सबसे तेज़ निष्पादन समय होने की गारंटी है (यदि आप विधानसभा का उपयोग करते हैं) को छोड़कर।

दूसरी ओर, मध्यम और बड़े एम्बेडेड सिस्टम में (जिसका अर्थ है कि मैं अधिक मेमोरी और घड़ी, बड़ा शब्द आकार) मैं यह नहीं कहूंगा कि C (या C ++) बहुत प्रचलित है। मैंने पायथन, फोर्थ ... यहां तक ​​कि जावा का समर्थन करने वाले सिस्टम देखे हैं।

लेकिन निश्चित रूप से आपके पास लगभग हमेशा C / C ++ का उपयोग करने का विकल्प होता है, जाहिर है, उन्हीं कारणों से जिनका मैंने ऊपर उल्लेख किया है। और विकल्प होने, और आप किसी ऐसे व्यक्ति के रूप में जो पहले से ही छोटे-एम्बेडेड के लिए सी के साथ सहज है, आप दूसरी भाषा क्यों चुनेंगे?


4
C ++ बहुत अधिक ओवरहेड उत्पन्न कर सकता है, लेकिन पूरी तरह से आज्ञाकारी C ++ कंपाइलर जिसका मैंने MSP430 के लिए उपयोग किया था, को रनटाइम की आवश्यकता नहीं थी, C ++ ने मूल कोड के लिए संकलन किया था। मुझे खेद है, दूसरों को बताना एक असहमति है और मैंने आपको नीचा दिखाया है। आप ऐसे संदर्भ प्रदान कर सकते हैं जो मुझे समझाते हैं कि मैं गलत हूं (जो कि कठिन होगा, मैंने अपनी परियोजनाओं के लिए संकलित C ++ की असेंबली लिस्टिंग पढ़ ली है, यह सुनिश्चित करने का हिस्सा है कि यह कुशलतापूर्वक संकलित है) या आप अपना उत्तर हटा सकते हैं आपकी प्रतिष्ठा पर प्रभाव (हालांकि इस बिंदु पर आपको +8 शुद्ध प्रतिनिधि प्राप्त होता है)
कोर्तुक

3
मैं कोरटुक से पूरी तरह सहमत हूं। C ++ के कुछ हिस्सों को व्यापक रन-टाइम समर्थन की आवश्यकता होती है, लेकिन जो भाग अभी भी बहुत बेहतर नहीं है वह C (और पूरी तरह से OO) है। कुछ कंपाइलर और लिंकर स्विच द्वारा इस सबसेट को प्रतिबंध आसानी से लागू किया जाता है। कुछ हिस्सों में (उदाहरण के लिए खूंखार प्रिंटफ) C ++ में कम से कम रनटाइम समर्थन की आवश्यकता के लिए कम से कम भाषा की क्षमता है (यदि केवल std :: cout को छोटे सिस्टम को ध्यान में रखते हुए लागू किया गया था ...)
Wouter van Ooijen

1
@ कोरटुक, वहाँ स्पष्ट नहीं होने के लिए खेद है, लेकिन जब मैंने कहा कि "सी एकमात्र भाषा है कि ..." का मतलब सी ++ उन दोनों चीजों में नहीं है, मेरा मतलब था कि सी में दो का संयोजन है और C ++ उनमें से एक है। मेरा जोर रनटाइम पार्ट पर था। मैं यह भी नहीं कह रहा हूं कि बिना रनटाइम के सी ++ का उपयोग करना पूरी तरह से असंभव है, लेकिन यह बहुत असामान्य है। मैं यह नहीं देख सकता कि कैसे आप बिना किसी रनटाइम के अपवाद हैंडलिंग और आरटीटीआई जैसी चीजें रख सकते हैं, उदाहरण के लिए, और वे काफी महत्वपूर्ण विशेषताएं हैं। लेकिन मैं माफी मांगता हूं अगर मैंने जिस तरह से व्यक्त किया वह संभव गलतफहमी पैदा करता है।
fceconel

@fceconel, मैंने एक रनटाइम वातावरण के साथ कभी भी C ++ का उपयोग नहीं किया है, और हम यहां एम्बेडेड सिस्टम की चर्चा कर रहे हैं, मैंने अपने माइक्रोकंट्रोलर्स पर रन-टाइम का कभी उपयोग नहीं किया है। यह सवाल थोड़ा अलग है, तो आप इसे पढ़ सकते हैं, यह पूछ रहे हैं कि C / C ++ केवल प्रचलित विकल्प क्यों हैं, C ++ के बजाय C क्यों नहीं। मैं स्वीकार करूँगा, कि क्यूट के रूप में भी कुछ का उपयोग करना मेरे माइक्रो में कभी नहीं होगा, मेरे पास कुछ मुफ्त पिंस हैं, स्क्रीन नहीं।
कोर्तुक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.