MSP430 CCS: Code in RAM

OP #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

OP #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.

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.