Forum: Compiler & IDEs msp430-gcc: Prolog und Epilog einer Funktion mit in Section


von Christian R. (supachris)


Lesenswert?

Ich hab seit langem mal wieder den msp430-gcc angeworfen (Version 4,8 in 
der CCE6 Version von TI). Und ich möchte einen Flash-Updater in eine 
Firmware integrieren. Mit angepasstem Linker-Script klappt das schon 
ganz gut, sämtliche Funktionen die ich für das Eigenupdate benötige 
landen in einer eigens dafür angelegten Section. Allerdings haut mir der 
GCC die Epiloge nicht in diese Section sondern in die normale .text 
Section, so dass ich an einer bestimmten Stelle ein Problem bekomme, 
weil ich irgendwann den Sektor lösche, in dem der Epilog der 
Flash-Funktion steht. Und dann ist natürlich Absturz.
Ich bin jetzt nicht der absolute GCC Crack und Google hat bisher auch 
nicht weiter geholfen. Wie krieg ich das hin, dass er die gesamte 
Funktion mit allem, was dazugehört, in die angegebene Section wirft?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Was meinst du denn mit Pro/Epilog?

In der GCC-Terminologie bezeichnen diese den Code, der vor bzw. nach dem 
eigentlichen Code der Funktion vom Compiler eingefügt wird um sich um 
Sachen kümmert wie Sichern/Wiederherstellen von Registern, Stack-Frame 
anlegen, Frame-Pointer initialisieren, Return-Sequenz, evtl. Code für 
Profiling, etc.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Da ich von msp430 keine Ahnung hab, hab ich mal ein Blick ins msp430 
Backend geworfen, allerdings den offiziellen GCC 4.9.

Da gibt's "epilogue_helper": 
http://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_9-branch/gcc/config/msp430/msp430.md?revision=210656&view=markup#l924

Diese wiederum sind implementiert in der libgcc: 
http://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_9-branch/libgcc/config/msp430/epilogue.S?view=co&revision=209304&content-type=text%2Fplain

Du müsstest diese Funktionen auch in deine Sonder-Sections legen.

Mit deinem Ansatz ist aber mit weiteren Problemen zu rechnen:

- Evtl. fehlen dem Flash-Updater dann diese Funktionen.

- Ditto für zip andere Fnuktionen der libgcc zu denen (implizite)
  Aufrufe im erzeugten Code sein können: Vergleiche, Shifts,
  Multiplikation, float Arithmetik, ... siehe Quellen
  in $GCC_SOURCE/libgcc/config/msp430/

Um solchen und ähnlichen Problemen aus dem Weg zu gehen, sind daher 
Flash-Updater (Bootloader) und Anwendung üblicherweise 2 getrennte 
Projekte.

von Christian R. (supachris)


Lesenswert?

Ja genau, laut Map File aus der libgcc. Hab schon befürchtet dass ich 
getrennte Projekte benötige. Das bringt zwar wieder anderen Stress mit 
sich, aber anscheinend gehts so sauberer. Werd ich am Dienstag gleich 
mal testen.

von Christian R. (supachris)


Lesenswert?

Mit zwei getrennten Projekten passt es jetzt. Kann ich dem Eclipse 
irgendwie verklickern, den Quelltext des Bootloader Projektes zu laden, 
wenn ich debugge und aus dem Hauptprogramm in den Bootloader springe? 
Ich hab schon "Load Symbols" probiert, aber ohne Erfolg.

von Markus F. (mfro)


Lesenswert?

Christian R. schrieb:...Kann ich dem Eclipse
> irgendwie verklickern, den Quelltext des Bootloader Projektes zu laden,
> wenn ich debugge und aus dem Hauptprogramm in den Bootloader springe?



da müsste ein
1
(gdb) add-symbol-file <bootloader.elf> <startadresse bootloader>

helfen (kannst Du evt. zu deinem .gdbinit hinzufügen).

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.