विकल्प 1: व्याख्या की गई भाषाएँ
यह सीधे प्रश्न का उत्तर नहीं देता है (जो कि एक उत्कृष्ट प्रश्न है, बीटीडब्लू, और मुझे एक ऐसे उत्तर से सीखने की उम्मीद है जो इसे सीधे संबोधित करता है), लेकिन यह बहुत आम है जब परियोजनाएं कर रहे हैं जो बाहरी कार्यक्रमों को लिखने के लिए बाहरी कार्यक्रमों को लोड कर सकते हैं। एक व्याख्या की गई भाषा। यदि संसाधन तंग हैं (जो वे इस प्रोसेसर पर होंगे, तो क्या आपने इसके लिए PIC32 या छोटे एआरएम प्रोसेसर का उपयोग करने के बारे में सोचा है?), भाषा को पूर्ण विनिर्देश के सबसेट तक सीमित करना आम है। आगे भी श्रृंखला नीचे डोमेन-विशिष्ट भाषाएं हैं जो केवल कुछ चीजें करती हैं।
उदाहरण के लिए, एलुआ परियोजना कम-संसाधन (64 kB RAM) की व्याख्या की गई भाषा का एक उदाहरण है। यदि आप कुछ सुविधाएँ निकालते हैं, तो आप इसे 32k RAM तक निचोड़ सकते हैं (नोट: यह आपके वर्तमान प्रोसेसर पर काम नहीं करेगा, जो कि 8-बिट आर्किटेक्चर है। बाहरी रैम का उपयोग करना संभवतः ग्राफिक्स के लिए बहुत धीमा होगा)। यह एक तेज़, लचीली भाषा प्रदान करता है जिसमें नए उपयोगकर्ता आसानी से गेम खेल सकते हैं यदि आप न्यूनतम एपीआई प्रदान करते हैं। ऑनलाइन भाषा के लिए बहुत सारे दस्तावेज उपलब्ध हैं। अन्य भाषाएँ (जैसे कि फोर्थ और बेसिक) हैं, जिनका उपयोग आप इसी तरह से कर सकते हैं, लेकिन मुझे लगता है कि इस समय लुआ सबसे अच्छा विकल्प है।
एक समान नस में, आप अपनी खुद की डोमेन-विशिष्ट भाषा बना सकते हैं। आपको अधिक पूर्ण एपीआई और बाहरी प्रलेखन प्रदान करना होगा, लेकिन अगर खेल सभी समान थे, तो यह बहुत मुश्किल नहीं होगा।
किसी भी स्थिति में, PIC18 शायद ऐसा प्रोसेसर नहीं है जिसे मैं किसी ऐसी चीज के लिए उपयोग करूंगा जिसमें कस्टम प्रोग्रामिंग / स्क्रिप्टिंग और ग्राफिक्स शामिल हैं। आप प्रोसेसर के इस वर्ग से परिचित हो सकते हैं, लेकिन मेरा सुझाव है कि डिस्प्ले ड्राइवर और अधिक मेमोरी के साथ कुछ का उपयोग करने का यह एक अच्छा समय होगा।
विकल्प 2: बस पूरी बात को दोहराएं
यदि, हालांकि, आप पहले से ही सभी गेमों को सी में प्रोग्रामिंग करने की योजना बना रहे हैं, तो एसडी कार्ड से सिर्फ गेम लॉजिक लोड करने से परेशान न हों । आपके पास फ्लैश को रीप्रोग्राम करने के लिए सिर्फ 32kB है, और इसके लिए आसानी से 4 जीबी माइक्रोएसडी कार्ड प्राप्त कर सकते हैं। (ध्यान दें: बड़े कार्ड अक्सर एसडीएचसी होते हैं, जिनके साथ इंटरफेस करना कठिन होता है)। यह मानते हुए कि आप अपने 32 kB के हर अंतिम बाइट का उपयोग करते हैं, जो एसडी कार्ड पर 131,072 प्रतियों के लिए आपके फर्मवेयर की जो भी गेम लॉजिक की जरूरत है, उसके लिए कमरा छोड़ देता है।
AN851 की तरह PICs के लिए बूटलोडर लिखने के लिए बहुत सारे अपॉइंटमेंट हैं । आपको अपने बूटलोडर को मेमोरी के एक विशिष्ट क्षेत्र (शायद मेमोरी क्षेत्र के शीर्ष, आप इसे लिंकर में निर्दिष्ट करेंगे) पर कब्जा करने के लिए डिज़ाइन करने की आवश्यकता होगी, और निर्दिष्ट करें कि पूर्ण फर्मवेयर प्रोजेक्ट इस क्षेत्र तक नहीं पहुंचते हैं। एपनोट इसे और अधिक विस्तार से बताता है। बस "बूट अनुभाग मैं PIC18F452 के बूट" को "बूट अनुभाग मैं लिंकर में निर्दिष्ट करता हूं" के साथ बदलें और यह सभी समझ में आएगा।
फिर, आपके बूटलोडर को उपयोगकर्ता को एसडी कार्ड से चलने के लिए एक प्रोग्राम का चयन करने की अनुमति देने की आवश्यकता है, और पूरी चीज़ की प्रतिलिपि बनाएँ। एक यूआई हो सकता है कि उपयोगकर्ता को चयन मोड में प्रवेश करने के लिए एक पुश बटन दबाए रखना होगा। आमतौर पर, बूटलोडर बस रीसेट पर इस बटन की स्थिति की जांच करेगा, और, अगर यह नीचे आयोजित नहीं किया जा रहा है, तो खेल में बूट करें। यदि इसे नीचे रखा जाता है, तो उपयोगकर्ता को एसडी कार्ड पर फ़ाइल चुनने, प्रोग्राम को कॉपी करने और [नए] गेम में बूट करना जारी रखने की अनुमति देनी होगी।
यह मेरी वर्तमान सिफारिश है।
विकल्प 3: गहरी जादू जिसमें हेक्स फ़ाइल का केवल एक भाग होता है
आपके प्रचलित तंत्र के साथ परेशानी यह है कि प्रोसेसर एपीआई और फ़ंक्शन कॉल के साथ सौदा नहीं करता है, यह संख्याओं के साथ काम करता है - वे पते जिनसे अनुदेश सूचक कूद सकता है और उम्मीद करता है कि कोड हो सकता है जो एपीआई युक्ति के अनुसार फ़ंक्शन कॉल निष्पादित करता है। यदि आप प्रोग्राम के सिर्फ एक भाग को संकलित करने का प्रयास करते हैं, तो लिंक करने वाले को पता नहीं चलेगा कि आप कॉल करते हैं check_button_status()
या क्या करते हैं toggle_led()
। आप जान सकते हैं कि प्रोसेसर पर हेक्स फ़ाइल में वे फ़ंक्शन मौजूद हैं, लेकिन यह ठीक से पता होना चाहिए कि वे किस पते पर रहते हैं।
लिंकर पहले से ही आपके कोड को कई वर्गों में तोड़ देता है; आप सैद्धांतिक रूप से इसे कुछ -section
और #pragma
भस्मों के साथ अतिरिक्त खंडों में तोड़ सकते हैं । मैंने ऐसा कभी नहीं किया है, और न जाने कैसे। जब तक उपरोक्त दो विधियां मुझे विफल नहीं करती (या कोई व्यक्ति यहां एक भयानक उत्तर पोस्ट करता है), मैं शायद इस तंत्र को नहीं सीखूंगा, और इसलिए मैं इसे आपको नहीं सिखा सकता।