Birisi Arduino önyükleyicinin nasıl çalıştığını açıklayabilir mi? Burada üst düzey bir cevap aramıyorum, kodu okudum ve özünü aldım. Ayrıca bu diğer yazı okudum (hatta cevap verenlerden biri olmuştu).
Arduino IDE ve önyükleyici kodu arasında gerçekleşen bir grup protokol etkileşimi vardır, sonuçta seri seri üzerinden iletilen programla flaşı kendi kendine programlayan bir dizi satır içi montaj talimatı ile sonuçlanır.
Açık olmadığım şey 270. satırda:
void (*app_start)(void) = 0x0000;
... bir fonksiyon göstergesinin bildirimi ve NULL olarak başlatılması olarak tanıyorum. Önyükleyicinin kullanıcı tarafından yüklenen kodun yürütülmesine delege edeceği yerlerde app_start'a sonraki çağrılar yapılır.
Elbette, bir şekilde bunun bir araya app_start
gelmesi için bir şekilde NULL olmayan bir değer alması gerekiyor. Bootloader kodunda görmüyorum ... sihirli bir bootloader tarafından yüklenen program tarafından bağlı mı? Ben önyükleyicinin ana çip sıfırlandıktan sonra yazılıma giriş noktası olduğunu düşünüyorum.
70 ya da daha fazla montaj hattına sarılmış, ana programa app_start'ın gerçekten nerede olduğunu söyleyen gizli dekoder halkası olmalı? Ya da belki Arduino IDE'den faydalanmak örtük bir bilgi birikimidir? Bildiğim tek şey, eğer birisi 0 dışında bir yere işaret etmek için app_start değiştirmezse, bootloader kodu sadece sonsuza dek kendi kendine dönecekti ... peki hile nedir?
Ayrı bir notta, bootloader kodunun kesintilere dayanması mümkün mü yoksa hayır mı?
Düzenle
Bootloader önyükleme yükleyici kodu için ayrı bir bellek alanı olmayan bir Tiny AVR (özellikle ATTiny44A) taşımak için çalışırken ilgileniyorum. Bootloader kodunun belirli sigorta ayarlarına ve çip desteğine dayandığı anlaşılır hale geldiğinde, gerçekten ilgilendiğim şeyin, bootloader'ı bu sigortalara ve donanıma sahip olmayan bir çipe taşımak için ne yapması gerektiğini tahmin ediyorum. destek (ama yine de kendi kendine programlama özelliği vardır)?
USI'yi yarı çift yönlü bir UART olarak kullanmak için AVR307 uygulamasını kullanabileceğimi düşünüyordum (Timer0 kesme ve pin değiştirme kesme kullanır). Herkes, bootloaderlar için donanım desteği olmayan bir yonga için bootloader kodunu yazma / taşıma hakkında nasıl rehberlik sunabilir?
Bootloader kodumu adres ana (örneğin 0x029e veya derleyici ana koyar) için normal konuma koymak istiyorum. Öyleyse, bootloader kodundaki 'adres', beni ana sonun sonundan geçmiş bir ofset ekledi ve bu adrese 'app_start' ayarladı. Bunu doğru düşünüyor muyum yoksa tamamen bir şey mi kaçırıyorum? Teşekkürler!
DÜZENLEME 2
FWIW, Arduino skeçlerini ATTiny85'e nasıl yükleyeceğime dair belgelenmiş bir süreç buldum , ki bu soruya ilk başta gittiğim yer ...