ใครช่วยอธิบายวิธีการที่bootloader ของ Arduinoทำงานได้หรือไม่? ฉันไม่ได้มองหาคำตอบระดับสูงที่นี่ฉันอ่านรหัสและได้รับส่วนสำคัญของมัน ฉันได้อ่านข้อความอื่น ๆ ของโพสต์นี้ด้วย(ฉันยังเป็นหนึ่งในผู้ตอบคำถามด้วย)
มีการโต้ตอบโปรโตคอลจำนวนมากที่เกิดขึ้นระหว่าง Arduino IDE และรหัส bootloader ซึ่งส่งผลให้มีคำแนะนำในการประกอบแบบอินไลน์จำนวนมากซึ่งจะทำการตั้งโปรแกรมแฟลชเองด้วยโปรแกรมที่ส่งผ่านอินเตอร์เฟสแบบอนุกรม
สิ่งที่ฉันไม่ชัดเจนในบรรทัด 270:
void (*app_start)(void) = 0x0000;
... ซึ่งฉันจำได้ว่าเป็นการประกาศและการเริ่มต้นเป็น NULL ของตัวชี้ฟังก์ชั่น มีการเรียก app_start ในลำดับต่อไปในตำแหน่งที่ bootloader มีวัตถุประสงค์เพื่อมอบหมายให้เรียกใช้งานโค้ดที่ผู้ใช้โหลด
แน่นอนว่าapp_start
ต้องมีค่าที่ไม่ใช่ค่า NULL ในบางจุดเพื่อให้ทุกคนมารวมกัน ฉันไม่เห็นว่าในรหัส bootloader ... มันเชื่อมโยงอย่างน่าอัศจรรย์โดยโปรแกรมที่โหลดโดย bootloader หรือไม่ ฉันสันนิษฐานว่า main ของ bootloader เป็นจุดเข้าสู่ซอฟต์แวร์หลังจากรีเซ็ตชิป
ห่อใน 70 หรือมากกว่านั้นสายการประกอบจะต้องเป็นแหวนถอดรหัสลับที่บอกโปรแกรมหลักที่ app_start เป็นจริง? หรืออาจเป็นเพราะความรู้โดยนัยที่นำมาใช้โดย Arduino IDE? สิ่งที่ฉันรู้ก็คือถ้ามีคนไม่เปลี่ยน app_start ให้ชี้ไปที่อื่นที่ไม่ใช่ 0 รหัส bootloader จะหมุนเองตลอดไป ... ดังนั้นเคล็ดลับคืออะไร?
ในบันทึกย่อที่แยกต่างหากมันเป็นไปได้ไหมที่รหัส bootloader จะขึ้นอยู่กับการขัดจังหวะหรือว่าไม่มีรหัส?
แก้ไข
ฉันสนใจที่จะลองพอร์ต bootloader กับ Tiny AVR (โดยเฉพาะ ATTiny44A) ที่ไม่มีพื้นที่หน่วยความจำแยกต่างหากสำหรับรหัสโหลดเดอร์ เมื่อฉันเห็นได้ชัดว่ารหัส bootloader อาศัยการตั้งค่าฟิวส์และการรองรับชิปฉันเดาว่าฉันสนใจที่จะรู้จริงๆว่าอะไรคือสิ่งที่ต้องใช้ในการย้ายพอร์ต bootloader ไปยังชิปที่ไม่มีฟิวส์และฮาร์ดแวร์เหล่านั้น สนับสนุน (แต่ยังมีความสามารถในการเขียนโปรแกรมด้วยตนเอง)?
ฉันคิดว่าฉันสามารถใช้งาน AVR307 เพื่อใช้ USI เป็น half-duplex UART (ใช้ Timer0 interrupt, และ pin-change interrupt) ใครสามารถให้คำแนะนำเกี่ยวกับวิธีการเกี่ยวกับการเขียน / การย้ายรหัส bootloader สำหรับชิปที่ไม่มีฮาร์ดแวร์รองรับ bootloaders?
ฉันคิดว่าฉันจะใส่รหัส bootloader ของฉันที่ตำแหน่งปกติสำหรับที่อยู่หลัก (เช่น 0x029e หรือที่ใดก็ตามที่คอมไพเลอร์วางหลัก) ฉันจะทำให้มันเป็น 'ที่อยู่' ในรหัส bootloader เพิ่มการชดเชยที่ทำให้ฉันเพิ่งผ่านจุดสิ้นสุดของหลักและมีการตั้งค่า 'app_start' ไปยังที่อยู่นั้น ฉันกำลังคิดเกี่ยวกับเรื่องนี้อย่างถูกต้องหรือฉันขาดอะไรบางอย่างโดยสิ้นเชิง? ขอบคุณ!
แก้ไข 2
FWIW ฉันพบกระบวนการจัดทำเอกสารเกี่ยวกับวิธีการโหลด Arduino สเก็ตช์ลง ATTiny85ซึ่งเป็นที่ที่ฉันไปกับคำถามนี้ในตอนแรก ... ค่อนข้างเรียบร้อยฉันคิดว่า