क्या प्रत्येक माइक्रोकंट्रोलर लाइन की अपनी प्रोग्रामिंग भाषा / वाक्य रचना है?


10

मैंने Arduino को प्रोग्राम किया है और Teensy की प्रोग्रामिंग शुरू कर दी है। वे सी के समान हैं लेकिन प्रोग्रामिंग भाषा में थोड़ी बारीकियां हैं।

उदाहरण के लिए, Arduino के C में आप एक फ़ंक्शन पिनमोड (पिन #, आउटपुट / इनपुट) कहते हैं, जो डिजिटल सिग्नल को या तो सिग्नल सिग्नल प्राप्त करने के लिए या सिग्नल प्राप्त करने के लिए डिज़ाइन करता है। Teensy के C में, आप "DDR" रजिस्टर को चार पोर्टों में से एक से जोड़ते हैं (जिनमें से प्रत्येक पिन का संग्रह दर्शाता है) जिसे आप इनपुट या आउटपुट ( Teensy IO सिंटैक्स ) के रूप में सामूहिक रूप से नामित करते हैं ।

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

प्रवचन के एक ही समय में: क्या ऐसे माइक्रोकंट्रोलर हैं जिन्हें सॉफ्टवेयर में प्रोग्राम नहीं किया जाता है या हमेशा यूकंट्रोलर को प्रोग्राम करने के लिए उपयोग की जाने वाली सॉफ़्टवेयर परत होगी? यदि बाद वाला, उनके लिए दस्तावेज कौन लिखता है / प्रदान करता है?


2
Arduino के लिए प्रोग्रामिंग भाषा C ++ है या शायद सिर्फ सी के एक सबसेट ++ (या यहां तक कि - (नहीं (केवल) सी) प्रसंस्करण )। यह पूरी तरह से स्पष्ट नहीं है, लेकिन यह निश्चित रूप से सी से अधिक है; उदाहरण के लिए इसमें कक्षाएं और उपयोगकर्ता-निश्चित ऑपरेटर + = है
पीटर मोर्टेंसन

1
यह C ++ है, यह g ++ - avr का उपयोग करके संकलित करता है। तकनीकी रूप से यह एक फ्रीस्टैंडिंग सी ++ कार्यान्वयन होगा, और इसमें सी ++ मानक पुस्तकालय (गतिशील मेमोरी आवंटन और आवश्यक होने के अपवाद जैसी चीजों के कारण) शामिल नहीं है। आप क्लास और टेम्प्लेट जैसी भाषा सुविधाओं का उपयोग कर सकते हैं, मैंने एक टेम्प्लेट-आधारित डिजिटलवर्ट () प्रतिस्थापन देखा है जो सीधे प्रदर्शन रजिस्टर तक पहुंचने के समान प्रदर्शन को प्राप्त करता है, अरुडिनो विधि में काफी उपरि है।
r_ahlskog

1
भाषा वही है। यह एपीआई है कि अलग है। यदि आप माइक्रोकंट्रोलर से दूर जाते हैं और डेस्कटॉप ऐप्स लिखना शुरू करते हैं, तो आपको विंडोज, लिनक्स और मैक के लिए सी प्रोग्राम लिखते समय ठीक वैसी ही समस्याओं का सामना करना पड़ेगा। यहां तक ​​कि अगर आप विशुद्ध रूप से POSIX API (जो सभी 3 प्लेटफ़ॉर्म समर्थन करते हैं) का उपयोग करते हैं, तब भी आप उपयोगकर्ता की सेटिंग / प्राथमिकताओं को सहेजना चाहते हैं, तब भी आप प्लेटफ़ॉर्म विशिष्ट अंतरों को मारेंगे।
स्लीपबेटमैन

जवाबों:


3

माइक्रोप्रोसेसर और माइक्रोकंट्रोलर आम तौर पर विभिन्न उत्पाद और निर्माता लाइनों के बीच एक साझा वास्तुकला का उपयोग करेंगे । ये आर्किटेक्चर आमतौर पर सभी कार्यान्वयन के लिए एक निम्न स्तर के कमांड सेट ( निर्देश सेट ) को परिभाषित करते हैं । एसी या सी ++ कंपाइलर सभी एआरएम प्रोसेसर पर बायटेकोड निष्पादन योग्य उत्पन्न करने में सक्षम होंगे।

हालांकि, वास्तुकला केवल आधी तस्वीर है। चूंकि बोर्ड बाह्य उपकरणों, मेमोरी प्रबंधन और अन्य कार्यान्वयन विवरणों पर बहुत सारे विशिष्ट मेमोरी पते हैं, जो आर्किटेक्चर को संबोधित नहीं करता है

एक निर्माता या तीसरा पक्ष आमतौर पर स्रोत फ़ाइलों (एक एचडीके ) का संग्रह प्रदान करेगा जो परिभाषा, पोर्ट मैपिंग और उदाहरण कोड प्रदान करेगा। आमतौर पर HDK C और C ++ के लिए है । आमतौर पर एचडीके में इसके साथ जुड़ा एक प्रदर्शन बोर्ड होगा ($ 500 arduino सोचो)। आपके द्वारा डिज़ाइन किए जा रहे डिवाइस के विकास / नमूना प्लेटफ़ॉर्म को समायोजित करने के लिए बहुत सारे विस्तृत कॉन्फ़िगरेशन कार्य अक्सर आवश्यक होते हैं

Arduino AVR वास्तुकला पर आधारित है और मुख्य रूप से Atmel द्वारा समर्थित है। Arduino ने आपके लिए प्लेटफ़ॉर्म बूटलोडर और सरलीकृत C ++ फ़ंक्शंस और ऑब्जेक्ट्स की एक लाइब्रेरी बनाई है, ताकि आप कम से कम प्रयास के साथ प्लेटफ़ॉर्म का उपयोग कर सकें। Arduino प्लेटफ़ॉर्म और IDE को कम से कम उपकरण वाले शौक़ीन लोगों के लिए डिज़ाइन किया गया है। Arduino से पहले, PIC ने एक आसान उपयोग और सस्ते BASIC वातावरण के साथ एक समान भूमिका पूरी की।

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


14

इस मामले में भाषा बिल्कुल समान है। Arduino वातावरण में कुछ अतिरिक्त पुस्तकालयों (बस अधिक सी कोड) होता है जो कि थोड़ा और अधिक उपयोगकर्ता के अनुकूल कार्यों के साथ वास्तविक हार्डवेयर रजिस्टरों (DDRx, PORTx, INx, आदि) तक पहुंच को 'लपेट'ता है। यह ओवरहेड को बढ़ाता है (एक ही ऑपरेशन के लिए अधिक निर्देशों को निष्पादित करने की आवश्यकता होती है) लेकिन लचीलापन बढ़ाता है क्योंकि यह एक प्रोग्राम लिखने के लिए "सरल" है जो केवल इन कॉल्स का उपयोग करता है, फिर इसे एक अलग चिप के लिए फिर से लिखना (जैसे, एक arduino मेगा) पुस्तकालय आंतरिक रूप से उचित मानचित्रण को संभालेंगे।

विभिन्न विक्रेताओं से चिप्स में वास्तव में निम्न-स्तरीय पहुंच के लिए कोई 'मानक' एपीआई नहीं हैं। हालांकि, सभी निम्न-स्तरीय पहुंच समान तरीके से की जाती है - निश्चित मेमोरी पते को पढ़ता और लिखता है - इसलिए समग्र पहुंच विधि विभिन्न भागों के बीच समान होगी, बस विवरण और नाम अलग-अलग होंगे। शायद कोई सिर्फ #defines रजिस्टर पते की विशाल सूची के साथ हेडर फाइल को संकेत के लिए उपलब्ध कराएगा। या शायद हेडर फाइलें संरचनाओं का उपयोग करके चीजों को एक पदानुक्रम के साथ व्यवस्थित किया जाएगा। कुछ निर्माता उच्च-स्तरीय एपीआई भी प्रदान कर सकते हैं। यह उन परिधीयों के लिए बहुत उपयोगी हो सकता है जो जटिल और कॉन्फ़िगर करना मुश्किल है। GPIO बहुत ही सरल है, लेकिन DMA सपोर्ट वाले USB कंट्रोलर में सैकड़ों रजिस्टर हो सकते हैं।

तो नीचे की रेखा हां है, आपको कुछ नए रजिस्टर नामों को सीखने की आवश्यकता होगी, लेकिन भाषा अभी भी C ++ (या सी, असेंबली, या शायद कुछ अधिक गूढ़ है)।


4
Arduino काफी सी (वास्तव में, C ++) नहीं है - यह एक प्रीप्रोसेसर है जो इसे सी कंपाइलर को खिलाने से पहले कुछ बदलाव करता है।
निक जॉनसन

दरअसल, Arduino के लिए, यह C. से अधिक है। यह C ++ (या शायद C ++ का सबसेट) है।
पीटर मोर्टेंसन

क्या यह केवल मूल C ++ है जो Arduino पुस्तकालयों के साथ है, या कुछ और है?
kayleeFrye_onDeck 1

Arduino IDE जाहिरा तौर पर अन्यथा मानक C ++ के शीर्ष पर अतिरिक्त पूर्व-प्रसंस्करण का एक सा करता है। ज्यादातर IDE ऐसा नहीं करते हैं।
एलेक्स.फोरेंनिच

यह मूल रूप से C ++ है, लेकिन main()आपके लिए पूर्व-परिभाषित है। इसके बजाय आपको दो एंट्री पॉइंट मिलते हैं: init()और loop()(अगर मैं गलत हूं तो मुझे सही करें लेकिन मैंने केवल
अरफिनो को

5

आप माइक्रोकंट्रोलर और कंपाइलर को भ्रमित कर रहे हैं। उच्च स्तरीय भाषाएं जो आप किसी विशेष माइक्रो में प्रोग्राम कर सकते हैं, उस माइक्रो के लिए क्या संकलक उपलब्ध हैं, इसका एक कार्य है।

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

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

हालांकि उच्च स्तर की भाषा बहुत अलग-अलग माइक्रोस में समान हो सकती है, मशीन के निर्देश आमतौर पर संबंधित माइक्रो के परिवार के भीतर समान होते हैं। उदाहरण के लिए, सभी माइक्रोचिप PIC 18 में एक ही निर्देश सेट (अधिकतर) है, जो कि मूल PIC 16 से अलग है, और PIC 24 और dsPIC 30 और 33 जैसे 16 बिट भागों से अलग है।


1
असेम्बलर भी जम्प स्टेटमेंट्स के लिए लेबलों को हल करता है, जो हाथ से किए जाने पर अत्यधिक त्रुटि वाला होता है।
पीट बेकर

2

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


वास्तव में, यह सी से अधिक है। यह सी ++ (या शायद सी ++ का सबसेट) है।
पीटर मोर्टेंसन

2

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

भाषा कार्यान्वयन के अंतर को विभिन्न भाषाओं के रूप में वर्गीकृत करने के लिए पर्याप्त बड़ा नहीं है, हालांकि मैं उन्हें 'बोलियों' में अंतर करने में संकोच नहीं करूंगा। परिवर्तन की दो परतें यहां मौजूद हो सकती हैं।

  1. उच्च-स्तरीय आवरण पुस्तकालय निर्माता या किसी तीसरे पक्ष से उपलब्ध हो सकते हैं
  2. कुछ कंपाइलर मानक-अनुरूप कोड का उत्सर्जन नहीं कर सकते हैं

आइए Arduino प्लेटफॉर्म का अवलोकन करते हुए इन बिंदुओं को लें।

  • Arduino समुदाय AVR आर्किटेक्चर चिप्स के लिए भारी अमूर्त C ++ लाइब्रेरी प्रदान करता है। ये पुस्तकालय एक विशिष्ट C ++ प्रोग्राम (जैसे मुख्य का छिपाना) से क्या उम्मीद कर सकते हैं, से अलग नियंत्रण प्रवाह का सुझाव देते हैं।
  • हुड के तहत, Arduino avr-gcc का उपयोग करके अपना कोड संकलित करता है, जो C / C ++ कोड का उत्सर्जन करता है। एवीआर चिप्स पर अपवाद अच्छी तरह से समर्थित नहीं हैं, हालांकि, और लगभग हमेशा अक्षम होते हैं। इतनी बड़ी विशेषता गायब होने के परिणामस्वरूप, परिणामी कार्यक्रम ऐसा काम नहीं कर सकता है कि 'नियमित' C ++ प्रोग्राम कैसे होगा।

यह जानने के बाद, आप कैसे तय करते हैं कि किसी भी मनमाने ढंग से माइक्रोकंट्रोलर कैसे प्रोग्राम करें? आपके पास कई विकल्प हैं:

  1. अपनी विशिष्ट चिप के लिए समुदाय-निर्मित लाइब्रेरी और आईडीई खोजें। AVR चिप्स को कभी-कभी केवल C का उपयोग करके विकसित किया जाता है, लेकिन Arduino प्रोजेक्ट हॉबीस्ट के लिए अधिक उपयोगकर्ता के अनुकूल अनुभव प्रदान करता है।
  2. ऐसे कंपाइलर खोजें जो आपकी विशिष्ट चिप के लिए संकलन करने में सक्षम हों। उचित संकलक के साथ, आपकी चिप की डेटशीट, और कुछ मात्रा में धैर्य, आप धातु के बहुत करीब कोड लिख पाएंगे।

संदर्भ के लिए, यहां GCC के लिए समर्थित बैकेंड की एक सूची है। आप देखेंगे कि ARM, AVR, MIPS और कुछ अन्य लोगों के लिए समर्थन है।

चिप्स के बारे में जो 'सॉफ्टवेयर' के साथ प्रोग्राम नहीं किए गए हैं ...

आप क्षेत्र-प्रोग्राम योग्य गेट सरणियों (FPGAs) में देखना चाहते हैं! FPGAs लॉजिक गेट्स का अनुकरण करने के लिए लुक-अप तालिकाओं के मूल्यों को बदलकर नियंत्रित किया जाता है। इसका कोई सॉफ्टवेयर प्रारूप नहीं है, प्रति se, लेकिन अभी भी VHDL और Verilog जैसी हार्डवेयर विवरण भाषाओं का उपयोग करके विकसित किया गया है।


1

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

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

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

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

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

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


दरअसल, Arduino के लिए, यह C. से अधिक है। यह C ++ (या शायद C ++ का सबसेट) है।
पीटर मोर्टेंसन

1

आपके दूसरे प्रश्न का उत्तर देने के लिए, शब्द "माइक्रोकंट्रोलर" का अर्थ है कि चिप में एक सीपीयू और रैम (और शायद रॉम) बोर्ड पर है। सभी माइक्रोकंट्रोलर सॉफ़्टवेयर चलाते हैं - इसलिए हम उन्हें पसंद करते हैं।

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

इन सुविधाओं से निपटने के लिए कंपाइलरों के पास कुछ विकल्प हैं:

  1. आधार भाषा का विस्तार, आम तौर पर नए खोजशब्दों (जैसे पास और दूर की यादों के लिए) के साथ।

  2. आंतरिक कार्यों (जैसे रोटेशन के लिए __ror) और __rol () प्रदान करें।

  3. उन्हें ऑप्टिमाइज़र में काम करें ताकि सी ऑपरेशंस के सीक्वेंस एक कुशल निर्देश में संकलित हो जाएं (उदाहरण के लिए एक गुणा / संचय)।

  4. यदि वे गैर-सी-मानक सुविधाएँ चाहते हैं, तो उन्हें अनदेखा करें और उपयोगकर्ता को असेंबली कोड लिखें।

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

अंत में, निर्माता-प्रदत्त पुस्तकालय फ़ंक्शंस हैं, जो आपके लिए रजिस्टर-राइट्स जैसे कम सामान को संभालते हैं।

आपका उदाहरण दो स्तरों को मिलाता है। DDR एक मैक्रो है जो एक रजिस्टर को संदर्भित करता है। इसे पॉइंटर एक्सेस या कंपाइलर इंट्रेंसिक फंक्शन (मैं भूल जाता हूं) के रूप में लागू किया गया है। pinMode () एक फ़ंक्शन है जो आपके लिए DDR रजिस्टर में लिखता है।

जब आप एक एमसीयू लाइन से दूसरे में जाते हैं, तो आपको नए रजिस्टर और नए कंपाइलर क्वर्क्स सीखने होंगे। यदि आप एक ही कंपनी के भीतर रहते हैं, तो आपको एक समान एपीआई मिल सकता है। विभिन्न कंपनियां एपीआई साझा नहीं करती हैं; हम अपने प्रतिस्पर्धियों पर स्विच करने में आपकी सहायता क्यों करेंगे? :-)


1

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

सी और फोर्थ को अलग-अलग मशीन कोड सेट में आसानी से पोर्टेबल होने के लिए डिज़ाइन किया गया है।

इसलिए यदि आप Arduino पर C, और Teensy पर C का उपयोग करते हैं, तो आप C का उपयोग दोनों मामलों में कर रहे हैं।

यदि आप Arthino पर Forth का उपयोग करते हैं, और Teensy पर Forth का उपयोग करते हैं, तो आप दोनों मामलों में Forth का उपयोग करेंगे।

कभी-कभी, अतिरिक्त हार्डवेयर सुविधाएं व्यक्ति (या समूह) को नए हार्डवेयर में भाषा को पोर्ट करने के लिए कुछ पूर्व-गढ़े हुए कोड लिखने के लिए प्रेरित करती हैं, जिससे आप बहुत कम-स्तरीय कोड लिखने के बिना हार्डवेयर प्लेटफ़ॉर्म की नई सुविधाओं तक पहुँच प्राप्त कर सकते हैं। स्वयं।

इन पुस्तकालयों (सी में) या शब्दकोशों (फोर्थ में) में कुछ हार्डवेयर-विशिष्ट फ़ंक्शन या शब्द हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.