Hi, ich versuche auf dem BeagleBone / TI AM3358 gerade das Link Command File zu verändern, weil ich einen Teil des Codes in den internen RAM verschieben möchte. Da das 1. nicht von all zu viel Erfolg gekrönt ist, weil es 2. nur Stochern im Nebel ist: gibt es irgendwo eine brauchbare Beschreibung dieses .CMD-Files? Bei TI habe ich nach langem Suchen nur was unpassendes für einen ganz anderen Prozessor gefunden... Danke!
Skjervoy schrieb: > weil ich einen Teil des Codes in den internen RAM > verschieben möchte. Ich glaube nicht, dass man das nur mit dem Linker lösen kann - wie soll denn der Code ins RAM kommen? Gruss Reinhard
Reinhard Kern schrieb: > Ich glaube nicht, dass man das nur mit dem Linker lösen kann - wie soll > denn der Code ins RAM kommen? Passt nicht zur eigentlichen Frage, aber ... SECTIONS { ramfuncs : LOAD = FLASHB, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0 } Natürlich muss das Umkopieren von FLASHB nach RAML0 durch Code durchgeführt werden, der sich im Flash befindet bzw. vorab bereits initalisiert wurde (Urlader u.ä.) Anm: Beispiel ist nicht für den AM3358.
Reinhard Kern schrieb: > Ich glaube nicht, dass man das nur mit dem Linker lösen kann - wie soll > denn der Code ins RAM kommen? Nein, das soll in der Tat bei der Initialiserung und vor'm ersten Aufruf der entsprechenden Codestellen per memcpy() geschehen. Allerdings muss der Code (für absolute Sprünge/sonstige Addressarithmetik) vorab ja wissen, wo er laufen wird - und genau das wird in eben diesem kryptischen .CMD-File gemacht.
Skjervoy schrieb: > und genau das wird in eben diesem > kryptischen .CMD-File gemacht. Ich weiss was du meinst - der Code wird (wenn man kein virtuelles Memory zur Verfügung hat), an einer bzw. für eine (RAM-) Adresse übersetzt, kommt aber zunächst an eine andere (ROM-)Adresse und landet erst per Loader an seiner richtigen Adresse. Meistens muss man das Programm für die endgültige Adresse übersetzen und dann manuell umkopieren. Ich kenne im Moment nur einen Assembler, der das direkt kann, aber lach dich nicht tot: M80/L80, der Urururahn aller Assembler und Linker, das erste und bis heute einzige perfekte Programm, das Microsoft verkauft hat, lange vor MSDOS und so modernem Zeug. M80 hatte einen .Phase-Befehl. Mit der Sequenz ORG 1000H .PHASE 4000H wurde das Folgende für die Adresse 4000H assembliert und gelinkt, aber an die Adresse 1000H im ROM geladen - fertig. Habe ich oft gebraucht und bei neueren Entwicklungssystemen schmerzlich vermisst. Gruss Reinhard
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.