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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.