एक शौक-मित्र-मित्र माइक्रोकंट्रोलर में रैम से निर्देश निष्पादित करें


12

मेरी परियोजनाओं में से एक को एक कार्यक्रम चलाने में सक्षम होने से बहुत लाभ होगा जो माइक्रोकंट्रोलर में संग्रहीत नहीं है (लेकिन इसके बजाय एक एसडी कार्ड में संग्रहीत है)।

इसलिए, मैं एक ऐसे उपकरण की तलाश कर रहा हूं जो मुझे एसडी कार्ड से रैम में कोड लोड करने की अनुमति देगा और फिर रैम से कोड निष्पादित करेगा। वर्तमान में, मेरे पास केवल प्रोग्रामर है जो PicKit2 के साथ आता है, इसलिए मैं PIC के साथ रहना पसंद करूंगा।

क्या किसी को पता है, अगर कोई है, PICs यह कर सकते हैं? यदि कोई PIC इसके लिए सक्षम नहीं हैं, तो कुछ अलग माइक्रो कंट्रोलर क्या हैं जो इसके लिए काम करेंगे? अधिमानतः एक ब्रेडबोर्ड संगत पैकेज में उपलब्ध हैं।


2
हुह? ... वास्तव में आपको राम के लिए क्या करने की आवश्यकता है? और 'स्टैटिक' से आपका क्या तात्पर्य है? आप वास्तव में स्व संशोधित कोड लिखने की कोशिश नहीं कर रहे हैं? क्या आप गतिशील मेमोरी आवंटन की कमी के बारे में बात कर रहे हैं? उर्फ नो मालोक?
मार्क

2
@ मर्क मैं एक प्रोग्राम को किसी बाहरी डिवाइस से लोड करने में सक्षम होना चाहता हूं, जैसे कि एसडी कार्ड, और इसे निष्पादित करना। मैं अपने पोस्ट में बेहतर समझाने की कोशिश करूँगा।
पोंकाडूडल

2
gotcha, केवल PIC जो मुझे पता है कि यह एक PIC32 है की अनुमति देगा। जब तक आप कुछ पागल नहीं करते हैं जैसे कि इसे एसडी कार्ड से फ्लैश में कॉपी करें, जो कि आपके स्विचिंग प्रोग्राम अक्सर अगर फ्लैश फ्लैश बहुत तेजी से खाएगा। अधिकांश छोटे 8/16 बिट यूसी डेटा (रैम) और प्रोग्राम (फ्लैश) स्पेस के बीच भारी खंडित होते हैं और प्रोग्राम काउंटर को रैम (हार्वर्ड आर्किटेक्चर, नो मेमोरी प्रोटेक्शन, आदि) को संबोधित करने की अनुमति नहीं देते हैं।
मार्क

जवाबों:


5

कुछ PIC हैं जो आपको बाहरी प्रोग्राम मेमोरी जोड़ने की अनुमति देते हैं। मैंने ऐसा कभी नहीं किया है लेकिन एप्लीकेशन नोट्स AN869 और AN778 में बाहरी मेमोरी को कैसे लागू किया जाए, इसकी अधिक जानकारी है।


11

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

यह दृष्टिकोण आपको गति की कीमत पर लचीलापन देता है।

चुनने के लिए बहुत सारे विकल्प हैं: माइक्रोकंट्रोलर्स के लिए उच्च-स्तरीय भाषा व्याख्याताओं / कंपाइलरों का सर्वेक्षण


1
अपना डीएसएल रोल करें। यह विकल्प मुझे सुझाए गए सभी समाधानों में से सबसे अधिक अपील करता है।
आमोस

6

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

MSP430 प्रोसेसर अपने रैम स्पेस से कोड चला सकते हैं लेकिन आपको 16k RAM स्पेस के साथ F5438 की तरह कुछ की आवश्यकता होगी - 128 बाइट्स में कोड चलाना वास्तव में एक विकल्प नहीं है!

अगर किसी प्रोसेसर में बाहरी बस है तो आप रैम को कोड स्पेस में रख सकते हैं। यदि प्रोसेसर आर्किटेक्चर डेटा को निष्पादन मेमोरी में लिखने की अनुमति नहीं देता है, तो आपको रैम को दो मेमोरी क्षेत्रों में मैप करने के लिए कुछ अतिरिक्त तर्क जोड़ना पड़ सकता है।

मैंने एक 8051 आधारित सिस्टम में RAM से कोड चलाया है लेकिन इसका मतलब है कि RAM को प्रोग्रामिंग के लिए EXTERN मेमोरी स्पेस में मैप किया जाना था और फिर निष्पादन के लिए CODE स्पेस में वापस आ गया। लोडर / मॉनिटर प्रोग्राम ने मेमोरी बैंक स्विचिंग और लोडिंग को संभाला। कृपया कोड न पूछें - मैंने लगभग 30 साल पहले ऐसा किया था और यह लंबे समय से गुम है (और पीएल / एम -51 में लिखा गया है)


5

निम्न और मध्य श्रेणी में से कोई भी PIC अपनी मेमोरी आर्किटेक्चर के कारण RAM से निष्पादित नहीं कर सकता है।

किसी भी एआरएम आधारित सीपीयू को रैम से निष्पादित करना चाहिए। हालाँकि वे smd पैकेज में होते हैं, लेकिन कुछ 'डीआईपी' आकार के मॉड्यूल हैं जो पहले से ही लोड किए गए माइक्रोकंट्रोलर हैं। उदाहरण के लिए mbed या LPCXpresso पर एक नज़र डालें । ये दोनों एक बूटलोडर के साथ आते हैं या, LPCXpresso के मामले में, एक डीबग इंटरफ़ेस के साथ-साथ मुफ्त कंपाइलर भी।

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

मुझे पूरा यकीन है कि MPS430 को भी ऐसा करने में सक्षम होना चाहिए, लेकिन मैंने कभी खुद ऐसा नहीं किया है।


इनबिल्ट फ्लैश ड्राइव पर कॉपी होने और फिर रीसेट होने से वास्तव में मैबड बायनेरी प्राप्त करता है। यह कंप्यूटर के USB पोर्ट से कनेक्ट होने पर फ्लैश ड्राइव के रूप में दिखाई देता है। यदि आप एसडी कार्ड के बजाय फ्लैश ड्राइव का उपयोग करने के लिए एक विधि का उपयोग कर सकते हैं, या इसे सेट कर सकते हैं, ताकि एसडी कार्ड से एक बाइनरी को स्वचालित रूप से फ्लैश ड्राइव पर कॉपी किया जाए और एक रीसेट प्रदर्शन किया जाए तो आप भाग्य में हो सकते हैं। Mbed को हार्डवेयर प्रोग्रामर की आवश्यकता नहीं है।
आमोस

5

प्रोपेलर बाहरी भंडारण से अपने कार्यक्रम को लोड करता है।


1
आमतौर पर प्रोपेलर चिप को 32K EEPROM (24LC256) से बूट किया जाता है, लेकिन यहाँ एक एसडी कार्ड से बूट करने का एक तरीका है: गैजेटगैन्स्टैस्टर.com
news

3

मुझे याद है कि AVRs के लिए एक बूटलोडर के बारे में पढ़ना जो एक एसडी कार्ड से .hex फाइल (संभवतः) के साथ चिप को फिर से फ्लैश करेगा। मुझे मूल स्रोत नहीं मिल रहा है, लेकिन यह Google खोज कुछ दिलचस्प हिट को बदल देती है। हां, मुझे पता है कि यह एवीआर है और पीआईसी नहीं है, लेकिन पीआईसी की बात से काम नहीं चलने पर आपको यह उपयोगी लग सकता है।



3

जैसा कि अन्य पोस्टरों ने उल्लेख किया है, आप 8 या 16-बिट PIC पर RAM से निष्पादित नहीं कर सकते, क्योंकि वे हार्वर्ड आर्किटेक्चर (अलग कोड और डेटा स्पेस) का उपयोग करते हैं। किसी प्रोग्राम को SD कार्ड से लोड करना और उसे कोड मेमोरी में फ्लैश करना व्यावहारिक है या नहीं, यह इस बात पर निर्भर करता है कि आप ऐसा कितनी बार करने जा रहे हैं।

यदि आप OS जैसा गतिशील वातावरण बनाने की कोशिश कर रहे हैं जो लगातार कार्यक्रमों को ओवरले कर रहा है, तो नहीं। लेकिन मेरे मामले में, मेरे पास एक प्रोग्राम है जो ड्राइवरों को 2 जीबी एसडी कार्ड की जरूरत के अनुसार लोड करता है। PIC24FJ256GB110 में 10,000 मिटा / लिखना चक्र न्यूनतम है। यहां तक ​​कि अगर यह प्रति दिन पांच बार किया गया था, तो फ्लैश न्यूनतम 5 1/2 वर्ष तक चलेगा।

(नोट: १०,००० का आंकड़ा एक न्यूनतम है। विशिष्ट मिटा / लिखें चक्र धीरज पांच बार हो सकता है - इसलिए यदि आप विकास कर रहे हैं, तो आप शायद एक प्रोसेसर को दिन में १४० बार फिर से फ्लैश कर सकते हैं - हर ३ १/२ मिनट में आठ घंटे के लिए - और यह अभी भी एक साल तक चल सकता है।)


2

मेरे स्कूल में हमने प्रोग्राम को लोड करने और निष्पादित करने के लिए बाहरी रैम के साथ HC11 या HC12 प्रोसेसर का उपयोग किया ... लेकिन मैं बोर्डों / किट का नाम भूल गया :( किसी भी मामले में, Freescale HC (S) -लाइन MCUs पता RAM और ROM , तो आप कोड को रैम में लोड कर सकते हैं और इसे निष्पादित कर सकते हैं।

से एक कतार लेते हुए blalor, सबसे अच्छा समाधान सिर्फ अपने बोर्ड पर एक बटन जोड़ना हो सकता है जो एसडी कार्ड पर संग्रहीत डेटा से पीआईसी को फिर से मिटा सकता है जिसे आप एक बूटलोडर के साथ सम्मिलित करते हैं। मैं कल्पना नहीं कर सकता कि बड़े PIC पर किस प्रकार का कोड फिट नहीं होगा; यदि आपके पास कुछ स्थिर डेटा (ग्राफिक्स, पाठ, ध्वनि) है, तो उसे बाहरी संग्रहण पर रखें।


1

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


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

0

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

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


हम्म, वास्तव में मैंने एवीआर से एक एएमआर को क्रमादेशित नहीं किया है, खेद है कि एक मेजबान से सीरियल खत्म हो गया था। एक तीसरा समाधान लाता है कि आप बहुत सारे सस्ते बोर्ड देख रहे हैं ... दो माइक्रोकंट्रोलर का उपयोग करें। इस स्थिति में एक दूसरे को रीसेट में रखा जाएगा, एसडी कार्ड पढ़ें, दूसरे माइक्रो को प्रोग्राम करें, सीरियल या अन्य के माध्यम से, फिर दूसरे माइक्रो पर रीसेट जारी करें। हॉबी / इवेल बोर्ड में अक्सर USB इंटरफ़ेस के लिए एक माइक्रो होता है और यह आमतौर पर दूसरे से जुड़ता है।
old_timer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.