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?
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.