MSP430 CCS: Code in RAM

#7370459
Lesenswert?

Ich möchte Code im RAM laufen lassen und diesen erst wenn er gebraucht wird ins RAM kopieren. Ich brauche das RAM zunächst komplett und erst wenn Code im RAM laufen soll, kann dann dieser den gesamtem RAM Bereich neu benutzen. Alle Variablen im RAM werden dann nicht mehr gebraucht.

Dazu habe ich entsprechend einer AN das Linker-File modifiziert und den Code angepasst.

Im Prinzip funktioniert es auch, aber nicht ganz so wie ich das möchte. Es sieht so aus, als ob der Code schon beim Starten ins RAM geladen und der benötigte Bereich vom "normalen" RAM abgezweigt wird. Das zeigt auch das .map File.

Wie kann ich denn bitte den Linker (benutze CCS 11.1) dazu bringen das so zu machen wie ich das möchte?

Danke für Hinweise.

#7370486
Lesenswert?

Bot N. schrieb:

und erst wenn Code im RAM laufen soll, kann dann dieser den gesamtem RAM Bereich neu benutzen.

Wo ist der Stack dann?

Bot N. schrieb:

Es sieht so aus, als ob der Code schon beim Starten ins RAM geladen und der benötigte Bereich vom "normalen" RAM abgezweigt wird. Das zeigt auch das .map File.

Kann man im Linkerfile overlay spezifizieren? RTFM ;) Und dass der die RAM-Funktion eben noch nicht kopieren soll. Aber kompiliert und gelinkt muss sie als solche schon sein. Irgendwo in den Flash wird der die auch rein stempeln.

Dann würde es reichen, im C-Code

  • RAM-Start
  • RAM-Ende
  • Startadresse der RAM-Funktion irgendwo-im-Flash
  • Länge der RAM-Funktion zu kennen.

Dann gibt es eine Funktion im ROM, die den Point-of-no-return darstellt. Die setzt den Stackpointer auf RAM-Ende und kopiert selbst den auszuführenden Code auf RAM-Start und springt dann da hin.

mfg mf

#7370495
Lesenswert?

Achim M. schrieb:

Kann man im Linkerfile overlay spezifizieren? RTFM ;) Und dass der die RAM-Funktion eben noch nicht kopieren soll. Aber kompiliert und gelinkt muss sie als solche schon sein. Irgendwo in den Flash wird der die auch rein stempeln.

Dann würde es reichen, im C-Code

  • RAM-Start
  • RAM-Ende
  • Startadresse der RAM-Funktion irgendwo-im-Flash
  • Länge der RAM-Funktion zu kennen.

Dann gibt es eine Funktion im ROM, die den Point-of-no-return darstellt. Die setzt den Stackpointer auf RAM-Ende und kopiert selbst den auszuführenden Code auf RAM-Start und springt dann da hin.

mfg mf

Soweit funktioniert es ja schon. Aber ich weiss nicht mit welchen Linkeranweisungen man bei CCS Overlays erzeugen kann und das Laden abschaltet.

#7370947
Lesenswert?

Bot N. schrieb:

Aber ich weiss nicht mit welchen Linkeranweisungen man bei CCS Overlays erzeugen kann und das Laden abschaltet.

Nur zur Info.

Inzwischen habe ich durch diverse Dokus und Beiträge doch herausgefunden wie es geht.

Durch passende #PRAGMA CODE_SECTION Anweisungen im Code und durch UNION und FLASH : origin Anweisungen im Linker-Commad-File kann man das mit CCS hinbekommen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren