Es hat etwas gedauert, aber jetzt habe ich es Mal getestet. Dabei habe ich mich an das Beispiel von Rudolph gehalten. Danke dafür.
Zusätzlich füge ich unter Toolchain -> ARM/GNU Linker -> Memory Settings noch das Item .text=0x2000 zu den FLASH Segmenten hinzu. Oder alternative ändere ich die Start-Adresse des ROM im Linkerskript.
1 |
rom (rx) : ORIGIN = 0x00002000, LENGTH = 0x00100000
|
Eines von beiden muss gemacht werden, aber beides zusammen geht auch nicht.
Jetzt kann ich das Programm kompilieren und auf den Mikrocontroller flashen. Natürlich startet das Programm ab Adresse 0x2000 und da der Bootloader nicht ins Hauptprogramm springt komme ich hier auch nicht hin.
Das war alles erwartet. Was ich nicht erwartet hatte, waren die Probleme beim Debugger. Hier habe ich unter Tools die Programming settings auf Erase only program area gesetzt (Den gesamten Chip kann ich ja auch noch nicht löschen) und die Reset strategy auf Normal (Ich habe auch Mal andere Reset Strategien ausgetestet, was aber keine Änderung gebracht hat). Bei den Debug settings habe ich Override Vector Table Offset Register aktiviert und dort die Adresse 0x00002000 eingegeben. Cache all flash memory except war aktiviert und habe ich auch aktiviert gelassen (Ich habe es auch Mal deaktiviert hat aber keine Änderung gebracht). Ein Wert habe ich nicht in Cache all flash memory except geschrieben. Use flashloader applet war aktiviert und hatte den Wert 0x20000000, was ich auch so gelassen habe (Deaktivieren hat auch keine Änderung gebracht).
Sobald ich den Debug-Modus starte, bekomme ich aber immer den Fehler Failed to launch program. Error: Failed to load ELF executable. Was mich wundert, da das Override Vector Table Offset Register doch extra für solche Probleme da seien soll. Natürlich nicht für mein spezielles Problem, aber es soll doch das Debuggen eines Programms ermöglichen, ohne den Bootloader zu löschen oder diesen zu durchlaufen.
Hat jemand erfahrung mit diesen Debug settings und weiß vielleicht, was ich falsch eingestellt habe?