( locsemege | 2023. 07. 01., szo – 14:59 )

off

Ezeknek az eszközöknek van gyakorlati hasznuk? Sohasem használtam még hardware debuggert. Első dolgom, hogy legyen valami soros portra logolásom. Kis PIC-re erre CLC modulból egy bites soros transmittert csináltam, a többi megy software-esen. Utána meg logolok, ha valami nem működik, aztán a homlokomra csapok, hogy hogyan lehettem ekkora ökör. :)

Értelemszerűen nem tudom a kérdésedre a választ, ha tudnám, írnám. Persze tippjeim vannak, mivel PIC32-re írtam már bootloadert.

Van valahol a bootloader. Az Intel hex file-ban meg az, hogy milyen címre mit kell írni. Ha a bootloader reserved címére akar írni, akkor könnyen lehet, hogy ez hibaüzenetben végződik, nem lesz öngyilkos a bootloader, s így nem téglásodik.

Ami nehéz ezekben a dolgokban, az az, hogy reset vektorból a valós hardware-en csak egy van, míg itt nyilván a bootloader indul, de akkor mi van azzal a kóddal, amit letölt? A megoldás, hogy a linker file-t kell átírni megfelelő módon. Illetve reset után fut egy olyan kódrész, ami inicializálja a globális és static változókat, minimálisan a hardware-t - órajel, eseteleg watchdog, memória elérés, effélék. Szokott lenni néha egy early initre kiugrási lehetőség, amelyet assembly-ben kell megírni, ha van erre igényed. Ezeket a fordító és a linker dokumentációjában találod meg, ezekre nincs szabványos megoldás. Processzorfüggő. Arról nem is beszélve, hogy vajon a flash-elt kódnak hol van az entry point-ja? Mert a reset vektor nyilván nem lehet.

Csak ezek után jön a main(), amiről a felületes szemlélő gondolhatná, hogy ott kezdődik a programja, de addig egy rakás dolog lefutott már. Viszont, ha van bootloader, ez a „láthatatlan” rész ütközhet a bootloaderrel.

Van egy másik izgalmas kérdés, az pedig az IT vektorok. Fut a bootloader, van pl. USB kezelése, benne IT, DMA, akármi, logolsz soros porton, tehát van EUSART IT, átadod a vezérlést arra a programra, amit letöltöttél, aztán... ó, jaj, még a bootloader IT-je kerül végrehajtásra az új programban? Tehát detach USB, IT tiltások vezérlés átadása, nagyon fontos, hogy itt inicializálódik a verem, a stack pointer új értéket kap, ezzel minden elvész a veremből, visszatérési címek is, majd IT-k engedélyezése, USB attach, meg ami még kell, aztán hadd szóljon, előbb-utóbb jön a flash-elt kód main()-je. :)

Gondolom, te ezt tudod, inkább az erre tévedő olvasóknak szólt. :)