Forum: Mikrocontroller und Digitale Elektronik STM32: sprintf wandelt nicht richtig


von Martin M. (martin69)


Lesenswert?

Hallo,

ich habe einen Quellcode von einem Atmega2560 auf einen STM32 gespielt. 
Nun macht sprintf Ärger. Anstelle einer Zahl in ASCII kommt nur Mist.
1
char caMinuten[4];
2
char caSekunden[4];
3
unsigned char ucMinuten;
4
unsigned char ucSekunden;
5
6
sprintf(caMinuten, "%2d", (int)ucMinuten);
7
sprintf(caSekunden, "%02d", ucSekunden);


Als String kommt "d" und "2d" anstelle der zu wandelnden Zahl. Mit Itoa 
geht es, aber Sekunden muß ich dann noch per Hand in eine zweistellige 
Zahl wandeln.

Warum geht sprintf beim STM32 (Segger Compiler) nicht richtig?

Gruß
Martin

von holger (Gast)


Lesenswert?

Was passiert wenn du mal %2i oder %2u benutzt?

von Johannes S. (Gast)


Lesenswert?

#include <stdio.h>  ist vorhanden?

oder braucht der Linker Optionen für das printf?
https://studio.segger.com/index.htm?https://studio.segger.com/cc_option_printf.htm

von Martin M. (martin69)


Angehängte Dateien:

Lesenswert?

>Was passiert wenn du mal %2i oder %2u benutzt?
Es wird "i" und "u" in den String geschrieben.


>#include <stdio.h>  ist vorhanden?
ja

>oder braucht der Linker Optionen für das printf?
Das von dem Segger-Link habe ich nun nicht so ganz verstanden.
Ich habe mal den Tooltip angehängt, was der Segger zu sprintf sagt. Wo 
muß ich da was machen?

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?

Irgendwo in den Projekteinstellungen für den Linker, ich kenne die 
Segger Tools/IDE nicht, deshalb kann ich das nicht konkreter sagen. Aber 
laut dem Link wird das so sein. Printf kostet viel Speicher und da ist 
es plausibel das es verschiedene Optionen gibt.
Was kommt den raus bei %d ohne die Längenangabe? Das sollte als Minimum 
funktionieren.

von foobar (Gast)


Lesenswert?

Aus der oben verlinkten Doku:

"Some library variants do not support width and precision specifiers in 
order to reduce code and data space requirements; please ensure that you 
have selected the correct library in the Printf Width/Precision Support 
property of the project if you use these."

von Martin M. (martin69)


Lesenswert?

Johannes S. schrieb:
> Was kommt den raus bei %d ohne die Längenangabe? Das sollte als Minimum
> funktionieren.

Ohne Längenangabe geht es.

von Martin M. (martin69)


Angehängte Dateien:

Lesenswert?

foobar schrieb:
> Aus der oben verlinkten Doku:
>
> "Some library variants do not support width and precision specifiers in
> order to reduce code and data space requirements; please ensure that you
> have selected the correct library in the Printf Width/Precision Support
> property of the project if you use these."

Wo kann ich das bei Segger einstellen?
Anbei eine Hardcopy der Options.

von Johannes S. (Gast)


Lesenswert?

Na dann such mal in Projekt/ Options die printf Einstellungen.

von Opti Mator (Gast)


Lesenswert?

Martin M. schrieb:
> Wo kann ich das bei Segger einstellen?

Üblicherweise bei den Linker Einstellungen. Die musst du
selbst suchen.

Dem Linker wird gesagt ob er eine vollständige oder eine
reduzierte Lib einbinden soll.

von Martin M. (martin69)


Angehängte Dateien:

Lesenswert?

hab es nun gefunden. Danke!

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.