कैसे "बेसिक" माइक्रोकंट्रोलर से एआरएम कॉर्टेक्स में संक्रमण?


22

मेरे पास विभिन्न निर्माताओं से 8-बिट कोर के साथ कई वर्षों का अनुभव है - अर्थात् 8051, PIC, और AVR - और मेरे पास अब इसका पता लगाने के लिए एक Cortex M0 है। विशेष रूप से यह एक है , लेकिन मुझे उम्मीद है कि हम इससे अधिक सामान्य हो सकते हैं।

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

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

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


यदि आपने निर्माता से प्रोसेसर के लिए वास्तविक डेटा शीट / उपयोगकर्ता पुस्तिका प्राप्त की है तो मैं आपको बता नहीं सकता। आपको एक अच्छी समग्र तस्वीर और विवरण देना चाहिए। आपके द्वारा लिंक की गई साइट पर मौजूद किसी भी चित्र से यह NXP प्रोसेसर जैसा दिखता है। निर्माता के भाग संख्या को देखें और उनकी साइट पर प्रोसेसर के दस्तावेज की खोज करें। इसमें ARM की साइट arm.com/products/processors/cortex-m/cortex-m0.php भी है
डिजिटलनिजा

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

और पिन कॉन्फ़िगरेशन को प्रिंट करने के बारे में सोचने के तरीके और नोट के अवलोकन के लिए @Richard का धन्यवाद करें। मैंने तुम दोनों का उत्थान किया।
एरोनड

आप कभी भी पीछे नहीं हटेंगे, सिवाय इसके कि आपको कुछ चरम मूल्य की आवश्यकताएं मिलें। और फिर भी आपको लुभाया जाएगा, क्योंकि काफी कुछ सस्ते कॉर्टेक्स-एम हैं।
रोनेन पैक्साओ

जवाबों:


40

मैंने AVRs के साथ-साथ ARM Cortex-M3 / M4 / R4- आधारित MCUs पर काम किया है। मुझे लगता है कि मैं कुछ सामान्य सलाह दे सकता हूं। यह मान लेंगे कि आप C में प्रोग्रामिंग कर रहे हैं, असेंबली में नहीं।

सीपीयू वास्तव में आसान हिस्सा है। मूल C डेटा प्रकार अलग-अलग आकार के होंगे, लेकिन आप वैसे भी uint8 / 16 / 32_t का उपयोग कर रहे हैं, है ना? :-) और अब सभी पूर्णांक प्रकारों को यथोचित रूप से तेज़ होना चाहिए, जिसमें 32-बिट (int) सबसे तेज़ है। आपके पास शायद एफपीयू नहीं है, इसलिए फ्लोट और डबल्स से बचें।

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

IOs के लिए, यह पता लगाएं कि परिधीय मक्सिंग को कैसे संभाला जाता है। क्या एक केंद्रीय मक्स नियंत्रण है जो पिन का परिधीय संकेत है और जो GPIO हैं? या क्या आप परिधीय रजिस्टरों का उपयोग करके परिधीय मोड में पिन सेट करते हैं? और निश्चित रूप से आपको यह जानना होगा कि इनपुट और आउटपुट के रूप में GPIO को कैसे कॉन्फ़िगर किया जाए, और ओपन-ड्रेन मोड और पुल-अप / डाउन को सक्षम करें। बाहरी व्यवधान आमतौर पर इस श्रेणी में आते हैं। GPIO बहुत सामान्य हैं, इसलिए आपका अनुभव आपको यहां अच्छी तरह से सेवा देना चाहिए।

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

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

Resets बहुत सीधे हैं। आमतौर पर आपको केवल वॉचडॉग टाइमर देखना होगा, जो डिफ़ॉल्ट रूप से सक्षम हो सकता है। जब आप समान कोड को बार-बार चलाते हैं तो डिबगिंग के दौरान रीसेट अधिक महत्वपूर्ण होते हैं। इस तरह से सीक्वेंसिंग के मुद्दों के कारण बग को याद करना आसान है।

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

माइक्रोकंट्रोलर परिधीय आमतौर पर एक दूसरे से स्वतंत्र होते हैं, इसलिए आप उन्हें एक बार में सीख सकते हैं। यह एक पेरिफेरल लेने और सिस्टम-स्तरीय सामान के भाग को सीखने के लिए इसका उपयोग करने में मदद कर सकता है। Comm बाह्य उपकरणों और PWM क्लॉकिंग और IOs के लिए अच्छे हैं, और टाइमर इंटरप्ट के लिए अच्छे हैं।

जटिलता के स्तर से भयभीत न हों। उन "बुनियादी" माइक्रोकंट्रोलर्स ने आपको पहले से ही बहुत कुछ सिखाया है जो आपको जानना आवश्यक है। अगर आपको कुछ भी स्पष्ट करने की जरूरत है तो कृपया मुझे बताएं।


4
अच्छा उत्तर। देखने के लिए एक और बात डीएमए बाह्य उपकरणों है, जो मेरे अनुभव में जटिल और कम-दस्तावेज़ वाले इंटरफेस हैं।
डग मैकलीन

3
"और अब सभी पूर्णांक प्रकार समान रूप से तेज़ होना चाहिए।" दरअसल, C में पूर्णांक पदोन्नति नियमों के कारण, 8/16-बिट प्रकारों का उपयोग करने से बहुत अधिक संकेत / शून्य एक्सटेंशन हो सकते हैं, और फ्लैश मेमोरी कम होने पर समस्या हो सकती है। तो अगर वहाँ अतिरिक्त करने के लिए रैम है, यह अधिक 32-बिट प्रकारों का उपयोग करने के लिए भुगतान कर सकता है या स्टैक चर के लिए कम से कम पसंद int/ int_leastN_Tप्रकार कर सकता है।
user694733

मेरी टिप्पणी पर गलती की। मेरे कहने का मतलब; int_fastN_tप्रकारों का उपयोग करें , न कि int_leastN_tप्रकारों का।
user694733

@ user694733: मेरी इच्छा है कि C मानक एक पूर्णांक के लिए पूछने के लिए कोड की अनुमति देगा जो किसी दिए गए आकार को स्मृति में रखता है और किसी विशेष सीमा के भीतर मानों पर काम कर सकता है, लेकिन उस सीमा से परे जाने पर शिथिल निर्दिष्ट शब्दों के साथ। एआरएम की तरह कुछ पर, int16_tअक्सर int32_tमेमोरी में संग्रहीत मूल्यों के लिए उतनी ही तेजी से होगा , लेकिन मानक को प्लेटफॉर्म पर जहां int17 बिट्स या उससे अधिक है, को -32767 पर int16_t x=32767; x+=2;सेट करना होगा x, अक्सर कोड की आवश्यकता होने पर भी साइन-एक्सटेंशन निर्देशों की आवश्यकता होती है। रैपिंग व्यवहार का उपयोग कभी न करें।
सुपरकैट

@supercat C मानक को केवल अहस्ताक्षरित प्रकारों के लिए रैपिंग व्यवहार की आवश्यकता होती है। विभिन्न प्रकार के संभावित अभ्यावेदन के कारण, हस्ताक्षरित प्रकारों के लिए कोई रैपिंग यूबी है। इसलिए x+=2, 16-बिट प्रकारों के लिए निर्देश का उपयोग करना कानूनी होगा, क्योंकि कंपाइलर मान सकता है कि मूल्य लपेट नहीं होगा, और इस प्रकार इसका उपयोग करने से अवलोकन व्यवहार में बदलाव नहीं होगा। लेकिन मुझे लगता है कि एआरएम में 16-बिट एडीडी निर्देश नहीं है जो इसे संभव बना देगा। (मैं गलत हो सकता है, एआरएम निर्देश सेट पर मेरा ज्ञान उतना अच्छा नहीं है।)
user694733

8

यह याद रखना उपयोगी है कि एआरएम माइक्रोप्रोसेसर के लिए बौद्धिक संपदा का मालिक है, लेकिन वास्तव में भाग नहीं बनाता है। इसके बजाय, निर्माता विभिन्न एआरएम प्रोसेसर संस्करणों को लाइसेंस देते हैं और सुविधाओं और बाह्य उपकरणों के व्यक्तिगत मिश्रण के साथ अपने स्वयं के अनूठे भागों का उत्पादन करते हैं।

इसके साथ ही, यदि आप आर्किटेक्चर के लिए नए हैं, तो संभवतः यह एआरएम के प्रलेखन के साथ शुरू करने के लिए समझ में आएगा, जो अनिवार्य रूप से ऐसे सभी माइक्रोप्रोसेसरों के लिए आधारभूत प्रलेखन है।

उदाहरण के लिए, Cortex-M0 का वर्णन ARM की वेबसाइट पर किया गया है

एआरएम से संबंधित पुस्तकों की एक सूची भी है जो विभिन्न प्रकार की आवश्यकताओं और हितों को पूरा करती है।

अंत में, विशिष्ट निर्माता के डेटशीट हैं। M0 के लिए, Cypress, NXP और STMicroelectronics Cortex-M0 पर आधारित वास्तविक भागों के कई निर्माताओं में से केवल तीन हैं।

(और नहीं, मैं एआरएम के लिए काम नहीं करता और कभी नहीं।)


1
यह एक बहुत ही सामान्य उत्तर है जो कुछ Cortex-M0 डॉक्स के लिंक से अधिक नहीं करता है, जो मुझे यकीन है कि ओपी अपने दम पर पा सकता है।
जे कार्लसन

1
यह सीधे प्रश्न को संबोधित करता है जो समग्र प्रलेखन खोजने में मदद के लिए कहा गया है। यह जवाब सीधे जवाब देता है कि जरूरत है और बताते हैं कि चीजें वैसी ही हैं जैसी वे हैं।
एडवर्ड

8

एक बड़ा अंतर विक्रेता द्वारा आपूर्ति की गई पुस्तकालयों का उपयोग है। PICs, Atmels, आदि के लिए, बुनियादी पुस्तकालयों (gpio, टाइमर, adc, आदि के लिए) का अधिकांश डेवलपर्स द्वारा उपयोग नहीं किया गया था। मेरे अनुभव में, लोग (अधिक से अधिक) अपना कोड लिखते समय उन्हें मार्गदर्शक के रूप में उपयोग करेंगे।

हालांकि, एआरएम के साथ, पुस्तकालयों का उपयोग लगभग हमेशा किया जाता है। एक मानक, "सीएमएसआईएस" है, जिसे निर्माताओं को पालन करने की सिफारिश की जाती है। ज्यादातर करते हैं। यह कोड पोर्टेबिलिटी (विभिन्न एआरएम के बीच और निर्माताओं के बीच) में सहायता करता है, और आपके कोड को संरचित करने के लिए एक "मानकीकृत" विधि देता है। लोगों को पुस्तकालय के कार्यों को देखने और समझने की आदत होती है।

यकीन है कि कुछ डेवलपर्स हैं जो रजिस्टरों को सीधे एक्सेस करते हैं, लेकिन वे आउटलेर हैं :)

आपके प्रश्न का उत्तर देने के लिए, मुझे लाइब्रेरी प्रलेखन के माध्यम से पढ़ने में बहुत मदद मिली। ST के पास एक अच्छी तरह से विकसित कोड है, जिसमें एक बड़ी Doxygen-create मदद फ़ाइल है। आप देख सकते हैं कि प्रत्येक हार्डवेयर मॉड्यूल के लिए सभी विकल्प क्या हैं।

उदाहरण के रूप में GPIO का उपयोग करने के लिए, आरंभीकरण फ़ंक्शन हैंडल:

  • दिशा (में या बाहर)
  • पुलअप / pulldowns
  • खुले कलेक्टर / धक्का-पुल
  • परिवर्तन दर
  • आदि।

विकल्पों को देखकर, आप देख सकते हैं कि क्या संभव है। और, ज़ाहिर है, आप इन विकल्पों को इनिट फ़ंक्शन में पास करना सीखेंगे!

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

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

एआरएम मजेदार हैं! मैंने पीछे मुड़कर नहीं देखा।


"PICs, Atmels, आदि के लिए, अधिकांश डेवलपर्स द्वारा पुस्तकालयों का अधिक उपयोग नहीं किया गया था।" यकीन नहीं होता कि कहां से आता है। मैंने केवल PICs का उपयोग किया है, AVR नहीं, लेकिन निश्चित रूप से अपनी खुद की लाइब्रेरी लिखना नहीं चाहूंगा, उदाहरण के लिए, USB होस्ट इंटरफ़ेस या TCP स्टैक, या SD कार्ड फ़ाइल सिस्टम के लिए। इन सभी के लिए माइक्रोचिप की लाइब्रेरी काफी पर्याप्त लगती हैं।
tcrosley

आह, @tcrosley, आप निश्चित रूप से सही हैं। मैं केवल बुनियादी बाह्य उपकरणों द्वारा कवर की गई कार्यक्षमता को संदर्भित करने की कोशिश कर रहा था: gpio, टाइमर, adc, आदि
बिट्समैक

मैं सहमत हूं, मैं आमतौर पर GPIO, टाइमर, घड़ियों और UART R / W को सीधे एक्सेस करता हूं। मैं कभी-कभी I2C, SPI, ADC और UART सेटअप के लिए अपनी लाइब्रेरी कॉल का उपयोग करता हूं लेकिन हमेशा नहीं। रजिस्टरों के बहुत सारे, चाहे आप PIC (और विशेष PIC32 में) या एआरएम बात कर रहे हों।
tcrosley

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

@ जयकार्लसन धन्यवाद! इस उत्तर के लिए आपका संपादन अस्वीकार कर दिया गया था क्योंकि हम अन्य लोगों के पदों को इतने महत्वपूर्ण रूप से बदलने वाले नहीं थे। लेकिन यह वास्तव में अच्छी जानकारी थी! मेरा सुझाव है कि आप इसे अपने स्वयं के उत्तर के रूप में पोस्ट करते हैं, इसलिए यह लोगों की मदद करेगा और
उत्थान

5

चलते रहने का अच्छा समय; 8-बिट्स तेजी से मर रहे हैं; जब आप (उदाहरण के लिए) STM32F103 के साथ $ 5 का बोर्ड खरीद सकते हैं जो कि 32-बिट एआरएम माइक्रोकंट्रोलर (USB के साथ भी!) सक्षम है, इसमें कोई संदेह नहीं कि समय बदल गया है।

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

इसका मतलब है कि आप कुछ समय के लिए अपने सिर को कंपाइलरों (और विशेष रूप से लिंकर्स और मेकफाइल्स) के साथ टकराते हुए बिताएंगे, लेकिन आप पर अस्पष्ट त्रुटियां हैं, लेकिन वे सभी अचूक हैं।

हिम्मत कैसे काम करती है (यानी एआरएम सीपीयू किताबें) घनी हैं और बहुत दिलचस्प नहीं हैं जब तक कि आपको वास्तव में अनुकूलन करने की आवश्यकता नहीं है (और आप चकित होंगे कि जब आप 32 बिट रजिस्टर और आपके पीएलएल होते हैं तो कितना आश्चर्य होता है d CPU घड़ी 100mhz के क्षेत्र में है)।

"पुराने स्कुल" एआरएम इंस्ट्रक्शन सेट बहुत नए "थम्ब 2" की तुलना में एक डिस्सैम्प को पढ़ने के लिए बहुत आसान है - जो कि आपको सबसे आधुनिक माइक्रोकंट्रोलर-लेवल एआरएम (कॉर्टेक्स) पर मिलता है - लेकिन फिर से विधानसभा-भाषा के निर्देशों का उल्लंघन है। ज्यादातर पृष्ठभूमि में फीका; यदि आपके पास सही टूलसेट है (विशेष रूप से ब्रेकपॉइंट्स / सिंगल स्टेप आदि के साथ एक अच्छा स्रोत-स्तरीय डिबगर) तो आप एआरएम होने के बारे में बहुत अधिक परवाह नहीं करते हैं।

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

हालांकि ... बाह्य ... ऐ और वहाँ रगड़ है।

आपको यकीन है कि आधुनिक MCUs के साथ खेलने के लिए एक टन सामान मिलता है, और यह बहुत फैंसी सामान है; आप अक्सर एवीआर, पीआईसी और 8051 ऑन-चिप बाह्य उपकरणों से परे परिष्कार की दुनिया पाते हैं।

एक प्रोग्राम टाइमर? नहीं, आठ की है! डीएमए? प्रोग्राम प्राथमिकता और फट मोड और जंजीर मोड और ऑटो-रीलोड और .. और .. और ... के साथ लगभग 12 चैनल कैसे।

I2C? I2S? दर्जनों पिन मक्सिंग विकल्प? पंद्रह अलग-अलग तरीकों से चिप फ्लैश को फिर से शुरू करने के लिए? ज़रूर!

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

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

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

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

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

मूल रूप से; इस टमटम पर सीपीयू की परवाह किए बिना (हो सकता है) आपके लिए पहले से चयनित हो, अपने आप को कुछ अलग विक्रेताओं (टीआई, एसटीएम, फ्रीस्केल और अधिक दिमाग में आने वाले सुपर-कॉर्टेक्स-आधारित मूल्यांकन बोर्डों) का एक मुट्ठी भर खरीदें। प्रदान नमूना कोड के साथ चारों ओर एक हैक है।

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


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

4

मैं भी AVR से आया हूं और अब आमतौर पर STM32 (कोर्टेक्स-एम) के साथ रहता हूं। यहाँ मैं शुरुआत के लिए सलाह देता हूँ, और शुरू होने पर अपनी कठिनाइयों को दर्शाता है:

  1. डिबगर के साथ एक बोर्ड प्राप्त करें, या कम से कम JTAG कनेक्टर (और फिर JTAG डीबगर खरीदें)। आसपास कई सस्ते हैं, और आप इसका उपयोग करके बहुत समय बचाएंगे ।

  2. सब कुछ शामिल के साथ एक अच्छी IDE प्राप्त करें। मैं एक लंबे समय पहले CooCox CoIDE की सिफारिश करता था। तब से इसने विकास को रोक दिया और पुनः आरंभ किया, इसलिए मुझे यकीन नहीं है कि यह अब कैसे है। "एक अच्छा आईडीई" आपको कुछ ही समय में मूल हैलो वर्ल्ड एलईडी ब्लिंकिंग प्राप्त करने की अनुमति देता है।

  3. "एक अच्छी IDE" को निर्माता के CMSIS हेडर को सेटअप करना चाहिए। यह मूल रूप से रजिस्टर मैप्स हैं जो सी / सी ++ प्रोग्राम के आसान लेखन की अनुमति देते हैं, जिसमें सादे संख्याओं और बिंदुओं के बजाय परिवर्तनशील नाम हैं।

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

  5. एवीआर से अलग, एआरएम चिप्स बाह्य उपकरणों के साथ शुरू होते हैं। आपको पहले उन्हें सक्षम करने की आवश्यकता है। एक अच्छा परिधीय पुस्तकालय में बाह्य उपकरणों का सही तरीके से उपयोग करने के तरीके के उदाहरण होंगे, और आप डिवाइस के डेटशीट से कुछ और जानकारी प्राप्त कर सकते हैं। इसलिए, घड़ियों और बाह्य उपकरणों को सक्षम करने से पहले याद रखें। हां, यहां तक ​​कि I / O पोर्ट को भी परिधीय माना जाता है।

  6. कोड जैसा कि आप सीखते हैं। सब कुछ एक ही बार में करने की कोशिश मत करो, क्योंकि यह वास्तव में काफी जटिल है। मैं क्लॉक ट्री (APB, AHB, आदि) बसों को सीखना शुरू करूँगा और कैसे घड़ियों और घड़ी डिवाइडर को इंटरैक्ट करेंगे। तब मैं देखूंगा कि IDE आपके डिवाइस के लिए लिंकर स्क्रिप्ट और स्टार्टअप कोड को कहां संग्रहीत करता है। लिंकर स्क्रिप्ट बहुत अधिक है कि आप मेमोरी को कैसे व्यवस्थित करते हैं (जहां रैम, फ्लैश, आईएसआर वेक्टर टेबल, आदि है)। स्टार्टअप स्क्रिप्ट आपके प्रोग्राम को सेट करती है (फ्लैश से रैम तक ग्लोबल वैरिएबल इनिशियलाइजर्स को कॉपी करने जैसी चीजें)। कुछ IDE में ASM में स्टार्टअप स्क्रिप्ट होती हैं और कुछ में C. कभी-कभी आप अपनी पसंद की भाषा में किसी दूसरे के लिए Google कर सकते हैं।

  7. ASAP जा रहे डिबगर को प्राप्त करें। शुरुआत में एक गलती करना काफी सामान्य है, कुछ सामान (आमतौर पर हार्डवेयर इनिशियलाइज़ेशन) को एक अलग क्रम में करना चाहिए जो आपको करना चाहिए। यह कभी-कभी एक ISR अपवाद को ट्रिगर करता है जो आपको while(1);अनंत लूप (उस ISR के लिए डिफ़ॉल्ट कार्यान्वयन) में मिलता है जो आपके प्रोग्राम को रोक देता है और डीबगर के साथ भी ट्रेस करना मुश्किल है। डिबगर के बिना कल्पना करें।

  8. डिबगर के बारे में बात करते हुए, UART को भी प्राप्त करने की कोशिश करें, फिर उसे पढ़ने के लिए एक सीरियल-यूएसबी एडेप्टर का उपयोग करें। printf()डिबगिंग हमेशा उपयोगी है :-)


3

मैंने ,०५१, एवीआर, या पीआईसी पर ज्यादा काम नहीं किया है। लेकिन हाल ही में मैंने प्रोसेसर के एआरएम कॉर्टेक्स एमएक्स लाइन को देखना शुरू कर दिया है। इसलिए मैं आपको 8051, एवीआर या पीआईसी से संक्रमण के बारे में बहुत कुछ नहीं बता सकता, लेकिन ज्यादातर एक शुरुआत के दृष्टिकोण से।

ARM®Cortex ™ -M4 प्रोसेसर हार्वर्ड आर्किटेक्चर पर आधारित है, इस प्रकार इसके अलग-अलग डेटा और इंस्ट्रक्शन बसें हैं। नीचे एक उच्च स्तरीय छवि है।

यहाँ छवि विवरण दर्ज करें

इस सप्ताह NXP रिप्रेजेंटेटिव हमारी सुविधा पर जाएंगे। मैं उनके साथ किसी भी NXP ARM-Cortex Mx संसाधनों की जांच करूंगा और उन्हें यहां पोस्ट करूंगा। आर्मसैट कमर्शियल 32-बिट माइक्रोकंट्रोलर (MCU) में ARM® Cortex®-M Cores पर आधारित है , मुझे लगता है कि उनके पास ARM प्रोसेसर सीखने के समान गाइड भी हैं। दुर्भाग्य से मैंने उन पर शोध नहीं किया है।


संदर्भ:

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