Forum: Mikrocontroller und Digitale Elektronik Anfänger Keil Linker Script/Einstellungsfrage LPC23xx


von Christoph F. (christoph1973)


Lesenswert?

Hallo zusammen,
zuerst will voran schieben, dass ich bisher wenig Erfahrung mit 
Linkerscripten habe.
Das Forum habe ich bereits durchsucht und es gab auch schon ähnliche 
Fragen, jedoch blieb eine Antwort meines Problems aus.
(Ähnlichstes Problem: Beitrag "Keil uVision3 Linker Problem")

Ich bin gerade daran einen Bootloader zu schreiben. Als IDE verwende ich 
Keil µVision3, als Debugger ULINK2, µC LPC2368.

Der Bootloader soll den Adressbereich 0x0 bis 0xFFF zugeteilt bekommen 
(also den kompletten ersten Sektor).

Für Debugzwecke wollte ich nun im gleichen Projekt eine weitere Funktion 
ab Adresse 0x1000 (in der später die App beginnen soll) "einspielen".
Ich freute mich zuerst dass man im Keil in den jeweiligen Optionen der 
Files (rechte Maustaste) die Adressbereiche vergeben kann (IROM1; IROM). 
Diese habe ich zwar definiert jedoch ändert sich beim betrachten des 
Disassesambly leider nichts an den Adressen, egal was ich wähle.
(e.g. für main.c -> IROM1 ; blinky.c -> IROM2 und umgekehrt brachte 
keine Änderung).
Habe ich mir das zu einfach vorgestellt, bzw. geht es überhaupt gewisse 
Funktionen an definierte Adressen zu legen und diese dann über die 
direkte Adresse abzurufen (später GOTO -> 0x1000)?

Wie gesagt es dient lediglich zum Testen der Bootloader Funktion. Später 
soll der Bootloader Code eines HEX Files in dem RAM ausführen und dieser 
Code (Flashloader) soll die eigentliche App. in den Speicherberich 
hinter den ersten Sektor schreiben.

Vielen Dank im Voraus
Christoph

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Zeig uns doch mal das von µVision erzeugte Scatter file.

Gruß
Marcus
http://www.doulos.com/arm/

von Christoph F. (christoph1973)


Lesenswert?

Hallo Marcus,
ich bin momentan immer noch auf der Fehlersuche, glaube aber das Problem 
gefunden zu haben.
Habe das Scatterfile gesucht und nicht gefunden (Auswahl in den Optionen 
ist ausgegraut).
Da ich noch mit der Evaluation Version arbeite (Vollversion kommt wohl 
die Tage) habe ich mir keine allzugroßen Gedanken gemacht weil da nur 
stand limitiert auf 32k.
Hab jetzt mal genauer bei Keil nachgelesen, und siehe da:
...
# The linker does not accept scatter-loading description files for 
sophisticated memory layouts. The --scatter command line option is 
disabled.
# The base address for the code and constants in memory must be 
0x000080000, 0x000100000, 0x000200000, 0x000300000, 0x000400000, 
0x010400000, 0xXX000000, or 0xXX800000 (where XX is a Hexadecimal number 
from 00-FF). When the base address is 0x0 the linker places the code at 
the start of on-chip Flash of most ARM processor-based microcontrollers.
# The vector table, reset handler, and library initialization code are 
linked at the base address. The remaining user code and constants are 
offset from the base address by 0x4000 (16 KBytes). Programs generated 
with the Evaluation Version of the tools may not be programmed into 
single-chip devices with less than 16 KBytes of on-chip ROM/Flash.
...

Ist mir jetzt echt peinlich aber scheinbar liegts an der Evaluation 
Software (zu meiner Verteidigung muss ich sagen, dass man in den 
Dialogen aber die Adressen alle eingeben konnte -> nicht ausgegraut)

Vielen Dank für deine Hilfe
Gruß
Christoph

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Keine Ursache. Da ich nicht mit der Eval Version arbeite, war mir dieses 
Problem gar nicht bekannt. Auch wieder was gelernt :-)

Gruß
Marcus
http://www.doulos.com/arm/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.