Hi Jungens (und Mädels),
ich habe mir erfolgreich eine Testversion von IAR EWARM zugelegt. Alles
in Allem eine sehr zufrieden stellende Lösung, da das Debuggen mit einem
USB/JTAG-Adapter hervorragend funktioniert und ausserordentlich fix ist.
So, nachdem ich mich nun ein bisschen in die IDE eingearbeitet habe,
möchte ich nun folgendes tun:
Ich will mein Projekt so konfigurieren, dass der gesamte Programmcode im
RAM liegt, wenn ich es als "Debug" kompiliere; bei "Release" soll es
dann ins Flash. Also eigentlich ein Setup, das ihr alle wohl kennt und
etwa ähnlich nutzt (denke ich mal).
Dazu habe ich jetzt aber ein paar fragen:
- was muss ich im Linkerscript (also in diesem ICF-File) schreiben, dass
mir der Code im RAM landet? Es ist mir schon klar, dass sowas da rein
muss:
1 | place in RAM_region { readonly };
|
2 | place in RAM_region { readwrite, block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
|
3 | block UND_STACK, block ABT_STACK, block HEAP };
|
Allerdings gibt das Probleme mit den Interruptvektoren.
Beim Startup setze ich MEMMAP korrekt auf den Wert 2, sodass die
Vektoren eigentlich im RAM liegen sollten. Wenn ich aber z.B. sowas
mache:
dann findet er den Vektor dennoch nicht, bzw. macht irgend einen
völligen Murks. Was habe ich falsch gemacht?
- wäre es auch möglich, mein Programm ins externe Memory (habe extern
512k SRAM dran) zu laden, und von dort auszuführen? Wenn es nämlich im
Internen RAM liegt, dann bin ich an die 64 kB gebunden (so gross ist das
RAM). Wird das Programm grösser, dann geht RAM debug nicht mehr.
Im Anhang findet ihr das Linkerscript, welches ich verwende (und was zu
den fehlerhaften Resultaten führt).
Eins ist mir nicht klar: Wo muss ich diese Interrupt-Vektortabelle
platzieren? An Adresse 0 oder an 0x40000000? (dort beginnt das interne
RAM). Wenn ich sie an Adresse 0 lade, muss er ja wieder was ins Flash
programmieren (was ja nicht Sinn der Sache ist - man [ich] debuggt doch
im RAM, um das Flash zu schonen, nicht?
Ich hoffe ihr könnt mir weiterhelfen!
Vielen Dank