Forum: Mikrocontroller und Digitale Elektronik Link Command / .cmd-File - wie geht es?


von Skjervoy (Gast)


Lesenswert?

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!

von Skjervoy (Gast)


Lesenswert?

Hm...schwierige Frage, oder?

von Reinhard Kern (Gast)


Lesenswert?

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

von Steffen R. (steffen_rose)


Lesenswert?

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.

von Skjervoy (Gast)


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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