Forum: Mikrocontroller und Digitale Elektronik MSP430 CCS: Code in RAM


von Bot N. (botnec)


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.

von Achim M. (minifloat)


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

: Bearbeitet durch User
von Bot N. (botnec)


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.

von Bot N. (botnec)


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.

: Bearbeitet durch User
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.