Hallo Ich habe an einem Mega8 ein Display und Ds1820 Sensoren. Ich wollte eine Ausgabe auf dem Display mit einem Komma (Punkt) machen. leider ohne Erfolg. Also habe ich mir eine kleine Testroutine aufgebaut: char *output; output = ""; float fo3= 123.123; sprintf (output,"%3.3f",(double)fo3); lcd_string( output ); auf dem display erscheint ein "?" Fragezeichen. wo liegt der fehler? grüße Sebastian (GCC Anfänger)
add linker options -Wl,-u,vfprintf -lprintf_flt Peter
Gast
#1618657
Hallo das geht auch mit den Linker Optionen nicht. Ausgabe auf dem Dispaly "???" die display ausgabe ist sonst ok. ich kann sonst alles ausgeben. Nur halt sowas wie hier im Code nicht. Code
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Hier nochmal der komplette Prozess, wie man ihm im AVR-Studio macht. Ev. hast du irgendwo einen Fehler gemacht http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio
Sebastian Albrecht schrieb: > Hallo das geht auch mit den Linker Optionen nicht. > > Ausgabe auf dem Dispaly "???" > > die display ausgabe ist sonst ok. ich kann sonst alles ausgeben. Aber nur zufällig :-) > char *output; > output = ""; > float fl1= 123.123; > sprintf (output,"%3.3f",(double)fl1); Das kracht gewaltig. Leider allerdings zu leise als das du es hören würdest. Du hast keinen Speicher reserviert, in den du schreiben dürftest. char output[20];
Also "Aktivieren der Floating Point Version von sprintf beim WinAVR mit AVR-Studio" --> Erledigt hatte ich auch schon so. dann den code geändert :
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
aber immer noch "?" liegts am ATMega8 ? meine Uraufgabe ist ja eigentlich 377/16 zu rechnen. geht das auch anders ??? Mit Komaausgabe ? grüße Sebastian nachtrag EDIT : ich habe mal noch weniger code draus gemacht aber immer noch "?"
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Sebastian Albrecht schrieb:
> aber immer noch "?" liegts am ATMega8 ?
Nein.
Es liegt an deiner Konfiguration.
In der ist die Unterstützung für floating Point bei printf nicht
aktiviert.
Definitiv!
Sebastian Albrecht schrieb: > meine Uraufgabe ist ja eigentlich 377/16 zu rechnen. geht das auch > anders ??? Mit Komaausgabe ? sprintf mit floating point ist ein ziemlicher Speicherfresser auf dem AVR. Schau dir mal dtostrf an, das wandelt auch Fließkommazahlen in ASCII-Text und ist nicht so speicherintensiv. Trotzdem funktioniert sprintf natürlich, wenn man alles richtig macht. #include "main.h" #include "avr/io.h" #include "util/delay.h" Keine Ahnung, was in main.h drinsteht. Aber ich vermisse hier ein #include <stdio.h>, in dem sprintf definiert ist. Bekommst Du da keine Warnung vom Compiler? Außerdem schreibt man die Dateien im Standardincludeverzeichnis in spitze Klammern. Servus Michael
gut das du so hartnäckig bist ( Karl heinz Buchegger) ... fehler gefunden und geändert. hatte die eintragung unter All Files und nicht unter Linker Optiones gemacht. DANKE ! <stdio.h> steht in der Main.h ich habe dem code nur sehr gekürzt das programm ist viiiiiel länger. Der rest läuft gut aber die ausgabe klappt halt nicht. so jetzt habe ich alles richtig denke ich und immer noch "?"
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
der TIP dtostrf war echt klasse, Funzt super !!! es kann so einfach sein ... grüße und Danke Sebastian
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
