আরডুইনো বুটলোডার বিশদ


11

কেউ দয়া করে ব্যাখ্যা করতে পারেন কীভাবে আরডুইনো বুটলোডার কাজ করে? আমি এখানে একটি উচ্চ স্তরের উত্তর খুঁজছি না, আমি কোডটি পড়েছি এবং আমি এর সংক্ষেপটি পেয়েছি। আমি এই অন্যান্য পোস্টের মাধ্যমেও পড়েছি (আমি এর প্রতিক্রিয়াশীলদের মধ্যে একজনও ছিলাম)।

আরডুইনো আইডিই এবং বুটলোডার কোডের মধ্যে ঘটে এমন একগুচ্ছ প্রোটোকল ইন্টারঅ্যাকশন রয়েছে যা শেষ পর্যন্ত অনেকগুলি ইনলাইন এসেম্বলির নির্দেশনার ফলস্বরূপ ঘটে যে প্রোগ্রামটির সাথে ফ্ল্যাশটি স্বয়ংক্রিয়ভাবে সিরিয়াল ইন্টারফেসে স্থানান্তরিত হয়।

আমি যা স্পষ্ট করছি না তা 270 লাইনে রয়েছে:

void (*app_start)(void) = 0x0000; 

... যা আমি কোনও ক্রিয়াকলাপের পয়েন্টার হিসাবে ঘোষণা হিসাবে এবং NULL- র কাছে আরম্ভ করি। অ্যাপ-স্টার্টে পরবর্তী সময়ে কলগুলি রয়েছে যেখানে বুটলোডার ব্যবহারকারী-লোড কোডটি কার্যকর করার জন্য ডেলিগেট করার উদ্দেশ্যে তৈরি হয়।

অবশ্যই, app_startএকসাথে এটির জন্য সকলের একসাথে এক সময় নন-নুল মান পাওয়া দরকার। আমি এটি বুটলোডার কোডে দেখছি না ... এটি কি বুটলোডার দ্বারা লোড হয়ে যাওয়া প্রোগ্রামটির সাথে জাদুকরীভাবে যুক্ত? আমি অনুমান করি যে বুটলোডারের প্রধান হ'ল চিপটি পুনরায় সেট করার পরে সফ্টওয়্যারটিতে প্রবেশের পয়েন্ট।

Or০ বা তাই লাইনগুলি সমাবেশে আবদ্ধ হওয়া অবশ্যই গোপন ডিকোডার রিং হতে হবে যা মূল প্রোগ্রামটি জানায় যেখানে অ্যাপ_স্টার্টটি আসলে? বা সম্ভবত এটি এরডুইনো আইডিই দ্বারা কিছু অন্তর্নিহিত জ্ঞানের সুযোগ নিয়েছে? আমি কেবল জানি যে কেউ যদি 0_ এর বাইরে অন্য কোথাও অ্যাপ_স্টার্ট পরিবর্তন না করে তবে বুটলোডার কোডটি চিরতরে নিজেকে ছড়িয়ে দেবে ... সুতরাং কৌশলটি কী?

একটি পৃথক নোটে, বুটলোডার কোডের দ্বারা বাধা-বিপত্তির উপর নির্ভর করা সম্ভব হবে বা এটি কোনও নো-হ্যাম?

সম্পাদন করা

আমি বুটলোডারটিকে একটি ক্ষুদ্র এভিআর (বিশেষত এটিটিইন 44 এ) তে পোর্ট করার চেষ্টা করতে আগ্রহী যার বুট লোডার কোডের জন্য পৃথক মেমরির স্থান নেই। আমার কাছে যেমন স্পষ্ট হয়ে ওঠে যে বুটলোডার কোডটি কিছু নির্দিষ্ট ফিউজ সেটিংস এবং চিপ সহায়তার উপর নির্ভর করে, আমি অনুমান করি যে আমি কী জানার জন্য আগ্রহী তা হ'ল বুটলোডারটিকে এমন একটি চিপে বন্দরে নিয়ে যাওয়া উচিত যা এর সাথে ফিউজ এবং হার্ডওয়্যার নেই port সমর্থন (তবে এখনও স্ব-প্রোগ্রামিংয়ের ক্ষমতা আছে)?

আমি ভাবছিলাম যে আমি AVR307 বাস্তবায়নটি অর্ধ-দ্বৈত ইউআরটি হিসাবে ইউএসআই ব্যবহার করতে পারি (টাইমার0 বিঘ্নিত ব্যবহার করে, এবং পিন-পরিবর্তন বিঘ্নিত করি)। বুটলোডারগুলির জন্য হার্ডওয়্যার সমর্থন নেই এমন একটি চিপের জন্য বুটলোডার কোডটি লেখার / পোর্টিং সম্পর্কে কীভাবে নির্দেশনা দেওয়া যেতে পারে?

আমি মনে করি আমি আমার বুটলোডার কোডটিকে ঠিকানা ঠিকানা (যেমন 0x029e বা যেখানেই সংকলকটি মুখ্য রাখে) এর জন্য সাধারণ স্থানে রেখে দেব। আমি তখন এটি তৈরি করব যাতে বুটলোডার কোডের 'ঠিকানা' একটি অফসেট যুক্ত করেছিল যা আমাকে প্রধানের শেষের শেষে ফেলেছে এবং সেই ঠিকানায় 'অ্যাপ_স্টার্ট' সেট করেছে। আমি কি এই সম্পর্কে সঠিকভাবে ভাবছি বা আমি কিছু হারিয়ে যাচ্ছি? ধন্যবাদ!

সম্পাদনা 2

এফডব্লিউআইডাব্লু, আমি এটিটিইনি 85 তে আরডুইনো স্কেচগুলি কীভাবে লোড করব তার জন্য একটি নথিভুক্ত প্রক্রিয়া পেয়েছি , যেখানে আমি এই প্রশ্নটি নিয়ে মূলত যাচ্ছিলাম ... আমার মনে হয় বেশ ঝরঝরে


1
stackoverflow.com/questions/3652233/arduino-bootloader/… ভাবছিলাম আমার উত্তর কোথায় গেল ...
নিক টি

উত্তর:


12
void (*app_start)(void) = 0x0000; 

এটি কোনও নুল পয়েন্টার নয়। এটি সত্যই অ্যাপ্লিকেশন কোড শুরু করার ঠিকানা, যা বুটলোডারটি লাফিয়ে। লিঙ্কারটি আপনার অ্যাপ্লিকেশন কোডটি ঠিকানায় শুরু করার ব্যবস্থা করে arran। এটিএমইজিএ 168৮ ডাটাশিটে 26-6 টেবিলটি দেখুন।

বুটলোডার কোডটি ফ্ল্যাশ-এ উচ্চতর শুরু হয়। ঠিক যেখানে বুটলোডার ফিউজের উপর নির্ভর করে।


যেখানে তারপর বুট-লোডার প্রধান কোড বসবাস করে ...
vicatcu

1
@ জবি, আহ ঠিক আছে ... আমার প্রশ্নের আপডেট দেখুন - আমি বুটলোডারকে একটি ক্ষুদ্র এভিআর-তে পোর্ট করার চেষ্টা করতে আগ্রহী যার বুট লোডার কোডের জন্য আলাদা মেমরির স্থান নেই।
ভিস্যাটাকু

1
@ জোবি, সুতরাং বুটলোডার কোড "" উপর নির্ভর করে বুট রিসেট ফিউজ প্রোগ্রাম করা যেতে পারে যাতে রিসেট ভেক্টরটি পুনরায় সেট করার পরে বুট ফ্ল্যাশ সূচনা ঠিকানার দিকে ইশারা করে this এই ক্ষেত্রে, বুট লোডারটি পুনরায় সেট করার পরে শুরু হয়। "
ভিসাতচু

3
আপনি কি বিশেষভাবে আরডুইনো বুটলোডারটি চান? এটি একটি এসটিকে 500 প্রোগ্রামারকে এমুলেট করে এবং এটি কিছুটা বিশাল। বুটলোডার দির একটি এমেগা 8 সংস্করণ রয়েছে যা জিসিসি -3 দিয়ে 1K এর নীচে সংকলন করে, তবে এটি আপনাকে উপলভ্য ফ্ল্যাশে মোটামুটি ছোট রাখবে leave
পিটার গিবসন

3
আপনি কি আদৌ কোনও বুট লোডার চান? এটিটিইনির পক্ষে অবশ্যই আইসিএসপি প্রোগ্রামার (যেমন ইউএসবিটিনিআইএসপি) ব্যবহার করে ডিভাইসটি প্রোগ্রাম করার জন্য আপনার প্রচেষ্টাটি বেশি সম্ভাবনাময়
সিঙ্গেলনেগেশন ইলিমিনেশন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.