Lite info om bootloader för AVR (Atmega 328p)
För att kompilera en bootloader behöver man ändra lite i Linkern för att det skall generera hex-filer med rätt adress. Default börjar programmet på adress 0x0, men bootloader ligger i slutet av minnet.
Atmel skriver minnes adresser i word inte byte, vilket kan göra detta lite krångligt.
Linkern behöver följande parameter:
-Wl,-section-start=.text=0x7c00
Där adressen är skriven i byte (tror jag)
För att översätta detta har jag gjort en liten lathund:
GCC använder Byte, medans Atmen använder Word.
Size W | Address W | Address dec W | Adress B |
512 | FE00 | 65024 | 7F00 |
1024 | FC00 | 64512 | 7E00 |
2048 | F800 | 63488 | 7C00 |
4096 | F000 | 61440 | 7800 |
-Wl,-section-start=.text=0x7E00 är ok för 256 bootloader
Debug av bootloader ser inte ut att fungera ?? kollar vidare.
Använd -g3 och (stabs + gdb extention), -O0 (no optimization).