क्या कोई यह बता सकता है कि Arduino बूटलोडर कैसे काम करता है? मैं यहाँ एक उच्च स्तरीय उत्तर की तलाश नहीं कर रहा हूँ, मैंने कोड पढ़ा है और मुझे इसका पता चल गया है। मैंने इस अन्य पोस्ट के माध्यम से भी पढ़ा है (मैं भी उत्तरदाताओं में से एक रहा था)।
प्रोटोकॉल इंटरेक्शन का एक गुच्छा है जो Arduino IDE और बूटलोडर कोड के बीच होता है, जिसके परिणामस्वरूप अंततः इनलाइन असेंबली निर्देशों की एक संख्या होती है जो कि प्रोग्राम को सीरियल इंटरफ़ेस पर प्रसारित होने के साथ फ्लैश को स्व-प्रोग्राम करता है।
मैं स्पष्ट नहीं हूँ जो लाइन 270 पर है:
void (*app_start)(void) = 0x0000;
... जिसे मैं फ़ंक्शन पॉइंटर की घोषणा के रूप में पहचानता हूं, और NULL को आरंभ करता हूं। उन जगहों पर app_start के लिए बाद में कॉल होते हैं जहां बूटलोडर को उपयोगकर्ता-लोड किए गए कोड के निष्पादन के लिए सौंपना है।
निश्चित रूप से, किसी app_start
को इसके लिए कुछ बिंदु पर गैर-पूर्ण मूल्य प्राप्त करने की आवश्यकता है ताकि सभी एक साथ आ सकें। मैं बूटलोडर कोड में नहीं देख रहा हूं ... क्या यह प्रोग्राम द्वारा जादुई रूप से जुड़ा हुआ है जो बूटलोडर द्वारा लोड हो जाता है? मुझे लगता है कि बूटलोडर का मुख्य चिप के रीसेट के बाद सॉफ्टवेयर में प्रवेश बिंदु है।
70 या विधानसभा की लाइनों में लिपटे गुप्त डिकोडर की अंगूठी होनी चाहिए जो मुख्य कार्यक्रम को बताती है जहां app_start वास्तव में है? या शायद यह कुछ निहितार्थ है कि Arduino IDE द्वारा लाभ उठाया जा रहा है? मुझे बस इतना पता है कि अगर कोई व्यक्ति 0 के अलावा कहीं और जाने के लिए app_start नहीं बदलता है, तो बूटलोडर कोड हमेशा के लिए अपने आप ही घूम जाएगा ... तो क्या चाल है?
एक अलग नोट पर, क्या बूटलोडर कोड के लिए इंटरप्ट पर भरोसा करना संभव होगा या यह कि नहीं-नहीं?
संपादित करें
मैं बूटलोडर को टिनी AVR (विशेषकर ATTiny44A) में पोर्ट करने की कोशिश कर रहा हूं जिसमें बूट लोडर कोड के लिए अलग मेमोरी स्पेस नहीं है। जैसा कि यह मेरे लिए स्पष्ट हो गया है कि बूटलोडर कोड कुछ फ़्यूज़ सेटिंग्स और चिप समर्थन पर निर्भर करता है, मुझे लगता है कि मैं वास्तव में क्या जानने में दिलचस्पी रखता हूं, यह बूटलोडर को एक चिप में पोर्ट करने में ले जाता है जिसमें उन फ़्यूज़ और हार्डवेयर नहीं होते हैं समर्थन (लेकिन अभी भी स्व-प्रोग्रामिंग क्षमता है)?
मैं सोच रहा था कि मैं एवीआर 307 के कार्यान्वयन का उपयोग यूएसआई को आधे-डुप्लेक्स यूएआरटी के रूप में उपयोग करने के लिए कर सकता हूं (टिमर0 इंटरप्ट और पिन-चेंज इंटरप्ट का उपयोग करता है)। क्या कोई इस बात के बारे में मार्गदर्शन दे सकता है कि बूटलोडर के लिए हार्डवेयर सपोर्ट न रखने वाली चिप के लिए बूटलोडर कोड लिखने / पोर्ट करने के बारे में कैसे जाना जाता है?
मुझे लगता है कि मैं अपना बूट लोडर कोड पता स्थान के लिए सामान्य स्थान पर रखूंगा (उदाहरण 0x029e या जहां भी संकलक डालता है)। फिर मैं इसे ऐसा बनाऊंगा कि बूटलोडर कोड में 'पता' ने एक ऑफसेट जोड़ा जिसने मुझे मुख्य के पिछले हिस्से में डाल दिया, और उस पते पर 'app_start' सेट कर दिया। क्या मैं इस बारे में सही ढंग से सोच रहा हूं या मैं पूरी तरह से कुछ याद कर रहा हूं? धन्यवाद!
EDIT 2
FWIW, मुझे एक ATTiny85 पर Arduino स्केच लोड करने के लिए एक प्रलेखित प्रक्रिया मिली , जो कि मैं मूल रूप से इस प्रश्न के साथ जा रहा था ... बहुत साफ-सुथरा मुझे लगता है