www.mikrocontroller.net

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


Autor: Jepp Noo (Firma: imbiss) (whd)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

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

Autor: Jepp Noo (Firma: imbiss) (whd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Zeile:
>
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?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jepp Noo wrote:
> Mit der Zeile:
>>
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.

Autor: Jepp Noo (Firma: imbiss) (whd)
Datum:

Bewertung
0 lesenswert
nicht 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 
;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.