Forum: Compiler & IDEs Programmcode mit dem Linker ins RAM!


von Jepp N. (Firma: imbiss) (whd)


Lesenswert?

Hallo,


Programmcode wird normalerweise in das .Text Section gespeichert. Wie 
kann mann den Linker so ändern dass der Code ins .Data d.h. RAM 
verlagert wird.

P.S: Programmiere mit dem MSP430-GCC + Eclipse an einem MSP-430.

wäre für eure Tipps dankbar

von Christian R. (supachris)


Lesenswert?

Das kann man über Attribute dem Linker mitteilen.
Ein Beispiel einer Funktionsdeklaration:
1
void Funktion(void)__attribute__((section(".data")));

von Jepp N. (Firma: imbiss) (whd)


Lesenswert?

Mit der Zeile:
>
1
void Funktion(void)__attribute__((section(".data")));
Hat es ganz gut funktioniert. Aber es müsste eine Möglichkeit geben den 
Linker Skript so umzuschreiben dass den Programmcode nicht in .Text 
sondern in das .Data Section speichert oder liege ich da falsch?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Zuerst wird der Code beim Programmieren ("Brennen"( des µC ins Flash 
geschrieben (so wie ROM-Code und initialisierte Variablen auch) und der 
Startup-Code schreibt die fürs RAM ausgelegten Funktionen dann ins RAM.

Ohne den Umweg über Startupcode und Flash könntest du nur arbeiten, wenn 
du eine Hilfsanwenung hast, die das RAM beschreibt. Beispielsweise mit 
einem Debugger auf dem Hostrechner, der per JTAG mit dem Target MSP430 
verbunden ist oder einen speziellen Bootloader oder einer dafür 
ausgelegten Routine auf dem MSP430. Das RAM Schreiben müsste bei jedem 
Power-On erfolgen.

von Christian R. (supachris)


Lesenswert?

Jepp Noo wrote:
> Mit der Zeile:
>>
1
void Funktion(void)__attribute__((section(".data")));
> Hat es ganz gut funktioniert. Aber es müsste eine Möglichkeit geben den
> Linker Skript so umzuschreiben dass den Programmcode nicht in .Text
> sondern in das .Data Section speichert oder liege ich da falsch?

Naja, weil es keinen wirklichen Sinn macht, den gesamten Programmcode 
in das RAM zu schreiben, ist das nicht vorgesehn. Wozu soll das auch gut 
sein?
Der Speicher bei MSP430 ist eh linear aufgebaut, außerdem wird Code aus 
dem Flash genauso schnell ausgeführt wie aus dem RAM.
Sowas macht ja nur bei einzelnen Funktionen, z.B. für spezielle 
Bootloader oder sowas Sinn. Zumal die MSP430 Reihe ja nicht gerade üppig 
mit RAM ausgestattet ist.

Dir steht es natürlich frei die Linker-Scripte anzupassen, sind ja 
selbsterklärend. Einfach die Adressen ändern und schon landet alles im 
RAM.

Schreib doch mal, wozu du sämtlichen Programmcode im RAM benötigst.

von Jepp N. (Firma: imbiss) (whd)


Lesenswert?

Hi,

Möchte in der Tat einen FlashBoot Loader zusammen flicken allerdings 
nicht den über einen RS323 sondern USB. Da ich noch nicht weiß wie groß 
das Firmware ist, möchte ich den Loader ins RAM per JTAG Flashen. Daher 
auch meine Anfrage wegen dem Linker.

Da das ganze über USB läuft, wird der auch die Stromversorgung gesichert 
;)

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.