Forum: Compiler & IDEs Code Composer Studio (CCS) Probleme mit sprintf


von Wolle G. (wolleg)


Angehängte Dateien:

Lesenswert?

Bei mir will sprintf mit Variablen, die > 32767 sind, nicht 
funktionieren.
Ursprünglich nahm ich an, CCS kann unsigned int Zahlen nicht 
verarbeiten.
Siehe Beitrag "CCS8 -- unsigned int zählt nicht über >32767", was so nicht 
stimmt.

Im Anhang mein Testprogramm
Bei mir funktioniert nur die Darstellung als Hexadezimalzahl.
sprintf(zaa,"%X",zahla);
63000-2000 = 61000 oder 0xEE48

Mit
sprintf(zaa,"%d",zahla);  (d für vorzeichenbehaftete Dezimalzahl)
wird die falsche Zahl -4536 dargestellt.

Mit   zahl=zahl +100; wird von Null beginnend, bis 32767 hoch gezählt 
und nach Überschreitung  von 32767 wird als negative Zahl zurückgezählt. 
(erscheint so auf der Anzeige)

Kennt sich jemand  mit CCS aus und kann mir helfen.

von pegel (Gast)


Lesenswert?

Könnte mit der Einstellung printf zu tun haben.

"Choosing the printf() compiler support setting"

http://processors.wiki.ti.com/index.php/Printf_support_for_MSP430_CCSTUDIO_compiler

Steht die auf minimal?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hast Du schon mal %u ausprobiert?

von Wolle G. (wolleg)


Lesenswert?

pegel schrieb:
> Steht die auf minimal?

Rufus Τ. F. schrieb:
> Hast Du schon mal %u ausprobiert?

Eigentlich hatte ich alles, was hier als Hinweise kam, schon mal 
probiert.
Da vermutlich das Programm CCS die Umstellung von 'minimal' auf 'full' 
nicht im laufenden Projekt kapiert hatte, habe ich ein neues Projekt 
begonnen und gleich zu Beginn von 'minimal' auf 'full' umgestellt.
Nachts den Computer abgestellt und heute früh Programm neu angeworfen 
und siehe da, alles in Butter (mit %u).
Aber warum die erste Umstellung von 'minimal' auf 'full' bei „laufendem“ 
Betrieb nicht funktioniert hatte, ???

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du "%d" angibst, bedeutet das, daß der übergebene Wert -- welchem 
Datentyp auch immer er entspringen mag -- als vorzeichenbehaftet 
interpretiert wird.

"%u" hingegen bedeutet, daß der übergebene Wert als vorzeichenlos 
interpretiert wird.

Das hat nichts mit "minimal" oder "full" zu tun.

1
printf("Wert: %d\n", -12);
2
printf("Wert: %d\n", 61000);
3
printf("Wert: %d\n", 0x8000);
4
5
printf("Wert: %u\n", -12);
6
printf("Wert: %u\n", 61000);
7
printf("Wert: %u\n", 0x8000);

Lass das mal auf Deinem µC laufen (nicht auf Deinem PC!) und sieh Dir 
die Ausgabe genau an.

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.