Ich habe mir für den MSP430F5528 einen Bootloader zum Firmwareupdate über USB geschrieben. Wie üblich, löscht der den Programmspeicher bis auf die Segmente mit dem eigentlichen Bootloader und den DLIB-Funktionen und wartet dann auf Daten. Solange ich die gleiche Firmware einlese, die bereits vorher auf dem Controller lief, klappt alles. Wenn ich aber irgendwo nur einen einzelnen Befehl hinzufüge, startet das Gerät zwar, liefert aber an allen Stellen, wo sprintf vorkommt, falsche Ausgaben. Es wird immer der Formatstring in den Ausgabestring kopiert. Beispiel: sprintf(Displ_String, "%03hhd", Ver_Softw); liefert "hhd". Ich habe schon überprüft, dass die sprintf-Funktion in dem vom Update nicht veränderten Speichersegment liegt. Gibt es noch irgendwelche anderen Daten von sprintf, die evt. verschoben oder überschrieben werden? Weiß jemand Rat?.
Hallo, Schau dir einfach das Hex File deines Bootloaders an, dann siehst du ja ob alles im gewünschten Bereich liegt mfg
Danke für die schnelle und hilfreiche Antwort. Ich nutze übrigens IAR EWB 5.4. Beim Vergleich der HEX-Daten, die sich eigentlich nur um einen einzigen Befehl im updatefähigen Speicherbereich unterscheiden sollten, habe ich einzelne Byteunterschiede an 9 Stellen im nicht vom Bootloader veränderbaren Speicher gefunden. Die Unterschiede betreffen nur Stellen an denen sich die Compilerbibliotheken befinden: _PrintfSmall __iar_Stoull __iar_Stoul Über den Assemblercode an den betreffenden Stellen erschließt sich mir leider nichts. Mir ist unklar, wieso sich im Bereich der Compiler-Funktionsbibliotheken Änderungen in Abhängigkeit vom Programm ergeben. Kann das evt. mit der dynamischen Zuweisung von RAM zu tun haben?
Das Problem ist gelöst, die Ursache ganz profan: Ich hatte nicht daran gedacht, auch die Konstanten der Laufzeitbibliotheken in den dauerhaften Bootloader-Speicher zu legen.
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.