Ich muss einen in C geschriebenen Bootloader-Code mit einem seriellen Programmierer in den Boot-Bereich von AVR ATmega32A programmieren. Ich kann den Code nicht direkt in den Boot-Bereich von Atmel Studio schreiben. Also suche ich hier nach einem Weg. Gibt es auch eine gute Möglichkeit, Anwendungscode und Boot-Code zu kombinieren und sie in den jeweiligen Abschnitten mit dem C-Programm zu schreiben?
Das ATmega32A-Datenblatt auf Seite 245 zeigt die folgende Tabelle, wo der Bootloader-Bereich beginnt, je nachdem, wie die BOOTSZ
Sicherungen eingestellt sind:
Angenommen, Sie haben BOOTSZ0
und BOOTSZ1
sind beide für den größten Bootloader-Abschnitt freigegeben, beginnt er bei 0x3800
. Aus der Dokumentation der Speicherabschnitte können Sie sehen, dass der Code in das .text
Linker-Segment geht und die Adresse geändert werden kann, indem Sie unter Projekteigenschaften | Werkzeugkette | AVR/GNU-Linker | Speichereinstellungen und Hinzufügen .text=0x3800
im Abschnitt FLASH-Segment:
Wenn ich den Bootloader mit der Anwendungsfirmware für die Produktionsprogrammierung kombinieren möchte, verwende ich normalerweise den Bootloader, um die Hauptfirmware zu laden, und lese dann das Ergebnis von FLASH zurück. Es sollte technisch möglich sein, sie mit benutzerdefinierten Linkersegmenten zu kombinieren, aber Sie müssten sehr vorsichtig sein, wo Dinge wie Standardbibliotheksfunktionen platziert wurden, sodass die erstere Methode wahrscheinlich einfacher und sicherer ist.
PeterJ
gzix
gzix
gzix
gzix
gzix