क्या भविष्य में PIC माइक्रोकंट्रोलर के लिए C ++ में कोड लिखना संभव है?


8

क्या कभी PIC का कोडिंग के लिए C ++ का उपयोग करना संभव है? क्या कोई हार्डवेयर सीमाएं हैं जो हमें C ++ का उपयोग करने से रोकती हैं? जब हम C ++ के बजाय C ++ का उपयोग करते हैं, तो प्रोग्राम की .hex फ़ाइल और प्रोग्राम का रनिंग समय कितना बढ़ जाता है? क्या वर्तमान PIC के लिए C ++ का उपयोग करना व्यावहारिक रूप से संभव है? क्या इस पर भविष्य की कोई योजना या विकास चल रहा है?


मुझे लगता है कि यह संभव है और संभव बना रहेगा, लेकिन AFAIK यह अनुशंसित नहीं के रूप में यह उच्च स्तरीय संरचना और कार्यों कि के लिए दृढ़ता से हार्डवेयर से संबंधित प्रोग्रामिंग उपयुक्त नहीं हैं लागू करता है
clabacchio

3
उपयुक्तता बहस के लिए - Electronics.stackexchange.com/questions/3027/…
टोबी जाफ़ी

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

2
@clabacchio: जरूरी नहीं कि सच हो। C ++ में, आप केवल उसी चीज़ का भुगतान करते हैं जो आप उपयोग करते हैं। मेरा जवाब यहां देखें: Electronics.stackexchange.com/questions/3027/…
Rocketmagnet

"PICs" एक बेकार सामान्यीकरण है। कुछ कम-अंत PIC (10F200 लगता है) C का उपयोग करना लगभग असंभव है। कुछ हाई-एंड PICs (32MX सीरीज़) C ++ में अभी उपयोग होने की अफवाह है, और निश्चित रूप से कोई तकनीकी कारण नहीं है कि यह क्यों नहीं हो सका। तो कुछ बेहतर focussing अधिक उपयोगी जवाब दे सकता है, अभी हर कोई एक अलग सवाल का जवाब देने में प्रभावी है।
राउटर वैन ओइजेन

जवाबों:


17

क्या कभी PIC का कोडिंग के लिए C ++ का उपयोग करना संभव है?

हाँ, यह अब संभव है। DsPIC के लिए, IAR सिस्टम्स C ++ कंपाइलर है (हालांकि यह बहुत पुराना है और समर्थित नहीं है)।

एक अन्य विकल्प C ++ से C कनवर्टर का उपयोग करना है। प्री-बिल्ड चरण का उपयोग करते हुए, C ++ को C में कनवर्ट करें, फिर अपने सामान्य C कंपाइलर को C (नॉटी लुकिंग) C दें। LLVM या Comeau के C ++ कंपाइलर पर एक नज़र डालें जो दोनों ऐसा करते हैं। कोमू केवल $ 50 है, लेकिन संभवत: पूरे टूलचेन और पुस्तकालयों को ठीक से काम करने के लिए कुछ प्रयास करना होगा।

क्या कोई हार्डवेयर सीमाएं हैं जो हमें C ++ का उपयोग करने से रोकती हैं?

लघु उत्तर, नहीं, कोई हार्डवेयर सीमाएँ नहीं हैं। लंबे उत्तर, सी ++ निश्चित रूप से एक ढेर और / या स्टैक के उपयोग को प्रोत्साहित करता है, जो सीमित रैम के साथ छोटे एमसीयू के साथ संघर्ष करेगा।

वे एक ढेर / ढेर के साथ संघर्ष क्यों करते हैं? दो कारणों से: ए) कई एमसीयू में सीमित रैम होती है, जो निश्चित रूप से ढेर के लिए पर्याप्त नहीं होती है, और बमुश्किल एक स्टैक के लिए पर्याप्त होती है। बी) कई MCUs पॉइंटर्स को अच्छी तरह से हैंडल नहीं करते हैं, इसलिए स्टैक पर वेरिएबल्स का उपयोग वास्तव में प्रदर्शन को मारता है।

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

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

अब, PIC32s निश्चित रूप से C ++ के साथ सामना कर सकते हैं। उनके पास 64kB तक रैम है, और MIPS कोर पर आधारित हैं, जो कि 32-बिट प्रोसेसर के साथ ठीक से उगाया जाता है। यह पॉइंटर्स और स्टैक के साथ-साथ पीसी से भी निपट सकता है। दरअसल, MIPS पर आधारित पीसी हैं (या कम से कम, वहां उपयोग किया जाता है)।

अफसोस की बात है कि C ++ को लेकर इतनी गलतफहमी है। यहां तक ​​कि बहुत अनुभवी कोडर्स को भी पता नहीं है कि भाषा कैसे काम करती है। सी + + एम्बेडेड सीपीयू पर उपयुक्त क्यों है, इस पर मेरा जवाब देखें ।

जब हम C ++ के बजाय C ++ का उपयोग करते हैं, तो प्रोग्राम की .hex फ़ाइल और प्रोग्राम का रनिंग समय कितना बढ़ जाता है?

जैसा कि मैंने कहा, कोई अंतर नहीं हो सकता है। Bjarne Stroustrup ने कई कार्यों के लिए समय और स्थान के प्रदर्शन की तुलना करने के लिए C / C ++ कंपाइलरों के एक समूह की तुलना की। परिणाम व्यापक रूप से भिन्न हैं। कुछ मामलों में, C ++ धीमी और बड़ी निकली, कुछ मामले धीमे और छोटे, या अधिक तेज़ और बड़े और इससे भी तेज़ और छोटे! तो, आपके प्रश्न का उत्तर यह है कि यह कंपाइलर पर बहुत अधिक निर्भर करता है, लेकिन सामान्य तौर पर, इसे कोई फर्क नहीं पड़ता है। अधिक विवरण के लिए, C ++ प्रदर्शन पर तकनीकी रिपोर्ट देखें

क्या इस पर भविष्य की कोई योजना या विकास चल रहा है?

यह मैं नहीं जानता। मुझे पता है कि माइक्रोचिप सी 32 संकलक खुला है, और आप स्रोत डाउनलोड कर सकते हैं। मुझे यह भी पता है कि मैंने जिस व्यक्ति के साथ काम किया है, उसने वास्तव में कुछ निर्देशों को ऑनलाइन पाया और सी ++ कोड को संकलित करने के लिए कंपाइलर प्राप्त करने में कामयाब रहा। लेकिन उन्होंने मुझे एक उचित उपकरण श्रृंखला के साथ स्थापित करने में सक्षम होने से पहले कंपनी छोड़ दी।


अपडेट करें

माइक्रोचिप में अब एम्बेडेड MCU के PIC32 रेंज के लिए C ++ कंपाइलर उपलब्ध है।



IAR वेब पेज से: "लीगेसी उत्पाद: dsPIC के लिए IAR एंबेडेड वर्कबेंच एक विरासत उत्पाद है। IAR सिस्टम्स इसे अपडेट नहीं करता है और इसके लिए समर्थन और अद्यतन अनुबंध खरीदना संभव नहीं है।"
जेसन एस

मुझे पता है कि आईएआर उत्पाद महान हैं, लेकिन दुर्भाग्य से बहुत महंगा है और यह 'पुराना' लगता है। मुझे पता है कि C ++ किसी भी प्लेटफ़ॉर्म पर संभव है जब तक आप सभी सुविधाओं का उपयोग नहीं करते हैं। हालांकि, यह कक्षाओं के साथ अमूर्तता की एक अतिरिक्त परत के लिए संभावना को जोड़ता है। मैं अक्सर टेम्प्लेट का उपयोग नहीं करता हूं, न ही मैं डायनेमिक मेमोरी एलोकेशन का उपयोग करता हूं। क्या किसी को PIC24 / PIC32 पर C ++ के लिए किसी अन्य प्रतियोगी को जानने के लिए होता है?
हंस

हाँ, क्षमा करें, यह वास्तव में एक महान खोज नहीं थी। मुझे अपने उत्तर में कुछ और बातें जोड़ने दें।
रॉकेटमैग्नेट

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

1
कोई पूछ सकता है: "सी की क्या विशेषताएं हैं जो एएसएम में नहीं हो सकती हैं?" उत्तर, "कुछ नहीं"। डिज़ाइनर को निर्दिष्ट करने के लिए लाभों में वृद्धि की क्षमता है, और कंपाइलर की जांच है कि कार्यान्वयन सही है। इस संबंध में C ++ के वास्तविक और तात्कालिक लाभों की सूची के लिए मेरा उत्तर Electronics.stackexchange.com/questions/3027/… देखें ।
रॉकेटमैग्नेट 14

5

जब हम C ++ के बजाय C ++ का उपयोग करते हैं, तो प्रोग्राम की .hex फ़ाइल और प्रोग्राम का रनिंग समय कितना बढ़ जाता है?

निर्भर करता है कि आप किन सुविधाओं का उपयोग करते हैं। यदि आप मुख्य ऑब्जेक्ट-ओरिएंटेड फीचर्स (क्लास + मेथड्स) का उपयोग करते हैं, तो बहुत कम प्रभाव होने की संभावना है (लंबे समय तक वेरिएबल वेरिएबल / फंक्शन के नाम, इसलिए सिंबल टेबल संभावना कुछ हद तक बढ़ जाएगी)। टेम्पलेट्स को एक अच्छे संकलक के साथ ज्यादा नहीं जोड़ना चाहिए।

यदि आप ऑल-आउट पागल हो जाते हैं और मानक टेम्पलेट लाइब्रेरी जैसी चीजों में खींचते हैं, और गतिशील मेमोरी आवंटन और अपवादों का उपयोग करते हैं, तो आपको कोड ब्लोट में चलाने की संभावना है।


ओपी के लिए एक चेतावनी को ध्यान में रखते हुए, छोटे मेमोरी आर्किटेक्चर पर मेमोरी आवंटन के बारे में बहुत सावधान रहें और हमेशा चलने वाले सिस्टम को एम्बेडेड करें।
केनी

"-1" एर कृपया टिप्पणी कर सकता है कि वह / वह क्यों सहमत नहीं है?
जेसन एस

मैं -1er नहीं हूं, लेकिन टेम्प्लेट एक ऐसी सुविधा है जिसका उपयोग कोड ब्लोट से बचने के लिए बहुत सावधानी के साथ किया जाना है। आप एक एल्गोरिथ्म की कई प्रतियों के साथ आसानी से समाप्त हो सकते हैं जब एक पर्याप्त होगा।
पीटर ग्रीन

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


1

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


0

शायद हाँ .. लेकिन आपको वैसे भी नहीं होना चाहिए ... C एम्बेडेड की भाषा है और C ++ का उपयोग करने के कोई लाभ नहीं हैं। या बल्कि, सी के फायदे एम्बेडेड के लिए सी ++ के फायदे को आगे बढ़ाते हैं। अपना समय बर्बाद मत करो।

  • यदि आप जानते हैं कि फ़ंक्शन पॉइंटर्स आदि का उपयोग कैसे किया जाता है, तो आप C ++ की तरह कोड कर सकते हैं, वहाँ कोई समस्या नहीं है।

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

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

1
मैं भी भीख मांगता हूं।
Rocketmagnet

3
हां, विश्वसनीय और उच्च प्रदर्शन कोड उत्पन्न करने के लिए टेम्पलेट एक अत्यंत शक्तिशाली तरीका है। सन्दर्भ एक अधिक विश्वसनीय सूचक हैं। C ++ के साथ आप केवल आपके द्वारा उपयोग की जाने वाली सुविधाओं के लिए भी भुगतान करते हैं। मुझे लगता है कि आपको वास्तव में C ++ को और अधिक समझने की आवश्यकता है।
Rocketmagnet

3
मुझे नहीं पता कि आपके लिए सी का अर्थ "एम्बेडेड की भाषा" है। यकीन है, यह बहुत लोकप्रिय है। क्या आप कह रहे हैं कि यह सबसे अच्छी भाषा है? पक्का नहीं।
रॉकेटमैग्नेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.