Hi!! In meinem Programm ist der folgende Code definiert: ;*********************************************************************** **************************************** #define RXTXData R4 #define bitcount R5 #define pointer R6 #include <msp430x11x2.h> NAME PROTOTYP EXTERN ausgabestring ; C-Funktion: berechnet Ausgabestring PUBLIC main PUBLIC dr_out .................. .................. ASEG 0x200 dr_out DB 15 ASEG 0x216 ; Arbeitsvariablen ins RAM laden ................... ................... ;********************************************** ;* Programmstart * ;********************************************** ORG 0xF000 ; Programm-Start ;********************************************** main MOV.W #0x280,SP ................... .................. CALL #ausgabestring ............ ............ Die zugehörige C-Funktion lautet: #include <stdio.h> extern char dr_out[15]; void ausgabestring (unsigned int dr_ref,unsigned int dr_akt) { float druck; druck = (150.0*dr_akt)/dr_ref; sprintf(dr_out,"\n%f",druck); druck =0; } Die Funktion soll beim Aufruf zwei Werte aus Assembler (R12,R14) übernehmen, den Quotienten berechnen und das Ergebnis formatiert als String in die Variable "dr_out" (Speicherplatz im RAM: 0x200 bis 0x214) schreiben. Die Berechnung der Variable "druck" funktioniert einwandfrei, die Übergabe der beiden Werte ist also richtig erfolgt. Bei dem Befehl "sprintf(dr_out,"\n%f",druck);" allerdings gibt es einen Reset und der Wert der Variable "druck" wird nicht in das RAM geschrieben, obwohl die Syntax des Befehls richtig ist . Wie muß ich dies berichtigen? Bei der Compilierung und Linkung des Programms ist keine Fehlermeldung zu beobachten. Wer kann mir da helfen? Ich habe die neueste Kickstart-Version von TI runtergeladen, dürfte also nicht an der Version liegen.... Wolfgang
Welchen MSP430 setzt du ein? sprintf ist extrem speicherhungrig - trotz fehlerfreier compilierung hatte ich auch schon bei einigen controllern probleme mit dem code.
Hallo Wolfgang, probiere es mal mit: sprintf(dr_out,"\n%f\0",druck); Wenn ich noch recht weiß gibt es bei sprintf je nach speichermodell Probleme mit dem Stringende. Viele Grüße, Holger
Evtl. hast Du den WatchDog zu empfindlich eingestellt? [s]printf benötigt viel Zeit...
Nein, ich hab's probiert, weder wenn ich den WDT abschalte noch wenn ich das GIE auf 0 setze, ändert sich was. Gibt's evtl eine Ersatzlösung? Wolfgang
hi. bei meiner entwicklungsumgebung von iar muss man die comiler-option (oder linker?) von "small_write" auf "mid_write" umstellen, um floating-point-unterstützung bei printf() zu erhalten. mfg sebastian
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.