Hallo,
wie kann ich mit einer Zahl, die in einer, als char initialisierten
Variable steht, rechnen?
Hier mal ein Beispiel, wie ich es meine:
1
unsignedchartest[20];
2
....
3
test="159.9568";
4
test=test*5.5963;
Ach so, die Konstante, mit der die Variable multipliziert wird ist eine
Kommazahl...
Das ganze soll auf einem ATmega8 stattfinden, und es wird mit dem WinAVR
Plugin programmiert...
Gruß, Exra
Hmmm, ich hab nun deine Funktion mal eingefügt, und dann kommt beim
Erstellen folgende Meldung:
warning: implicit declaration of function 'sprintf'
Ich hab aber die librarys libm.a und libprintf_flt.a schon
hinzugefügt.....
Muss ich noch etwas machen, damit es klappt?
Gruß, Extra
Ich hab ein C-Buch, aber nur ein ganz Allgemeines Anfängerbuch, da steht
printf drin, aber nicht sprintf....
Ich habe ehrlich gesagt keine Ahnung, wie ich das selbst schreiben
könnte, außerdem will ich mich auf mein eigentliches Projekt
konzentrieren, und nicht für alles eine eigene Funktion schreiben, wenn
es bereits fertige gibt.
Gruß, Extra
Wenn ich stdio.h noch include, dann erhalte ich drei Fehlermeldungen,
die ohne die lib nicht da sind. Zwei Fehler davon sind in meinem
selbstgeschriebenen Programm, und einer in der library.
Woran liegt das, dass dann plötzlich Fehler da sind, die sonst nicht da
waren?
Gruß, Extra
> Zwei Fehler davon sind in meinem selbstgeschriebenen Programm,
Ja, das glaube ich dir.
> und einer in der library.
Das nicht ;-)
> Woran liegt das, dass dann plötzlich Fehler da sind,> die sonst nicht da waren?
Tja, da müsst man erst mal wissen welche das sind, oder?
>Woran liegt das, dass dann plötzlich Fehler da sind, die sonst nicht da>waren?
Das liegt an deinem Code. Da dieser sowie auch die Fehlermeldungen
scheinbar "Top Secret" sind, kann dir niemand helfen.
So, ich hab den Sourcecode mal angehängt.
Der erste Fehler:
error: expected declaration specifiers or '...' before '(' token
(in der mit den vielen 1 markierten Zeile)
Der zweite Fehler:
error: number of arguments doesn't match prototype
(in der mit den vielen 2 markierten Zeile)
Der dritte Fehler:
...avr/include/stdio.h:771: error: prototype declaration
ist in dieser Codezeile der stdio.h lib:
1
externintfgetc(FILE*__stream);
Ich hoffe, das ist so verständlich...
Woran liegt das? Weil wenn ich, wie schon gesagt, #include <stdio.h>
auskommentiere, dann sind alle drei Fehlermeldungen weg.
Gruß, Extra
PS: Der Code befindet sich noch im Entwickelstadium, daher ist auch noch
so viel auskommentiert. Die lcd- lib ist aus dem wiki, und die UART- lib
von Peter Fleury.
Ja, aber wie soll ich es denn sonst machen, wenn ich eben eine char-
Variable benötige, aber nur ein Zeichen ablegen will?
Klar, ich hätte die ganzen Temps zu einem Array zusammenfassen können,
dann wäre es meiner Meinung nach aber unübersichtlicher geworden. Wobei
das mit den Temps echt nicht gut gelöst ist, aber ich war nicht kreativ
genug, um mir irgendwelche Namen einfallen zu lassen.
Und: Ich bin noch Anfänger in C....
Gruß, Extra
"wenn ich eben eine char Variable benötige, aber nur ein Zeichen ablegen
will"
Dass schreibt man aber generell so
char a;
und nicht :
char a[1];
Ich hab diese Schreibweise noch nie zuvor gesehen ....
Du hast doch auch int status benutzt und nicht int status[1]. Warum
sollte das mit char nicht funktionieren. Char und int zeigen doch nur
den Typ der Variable an und damit ihren Speicherbedarf/max inhaltliche
Größe, mehr nicht.
>int getchar() //1111111111111111
Für getchar() gibt es einen Prototypen in stdio.h.
int getchar(void)
Und Fleury benutzt auch ein getchar().
int getchar()
Schreib das mal so:
int getchar(void) //1111111111111111
Vieleicht hilft das schon.
Sonst getchar() einfach in uart_getchar() umbenennen.
Im gesamten Code versteht sich.
Vielen Dank holger, das wars!
Hab ich jetzt ehrlich gesagt gar nicht drangedacht, dass es den
Funktionsnamen schonmal geben könnte.....
Naja, werde ich in Zukunft besser aufpassen beim Vergeben meiner
Funktionsnamen.
Jetzt muss ich nurnoch testen, ob das mit sprintf funktioniert.
Gruß, Extra
Ich bin auch blöd, in eine Variable mit einem Speicherplatz von 4
Zeichen passt nicht die Zahl 15.2569. Aber selbst wenn ich für
kmh_string 10 Zeichen reserviere, kommt immernoch das Fragezeichen auf
dem LCD.
Gruß, Extra
Ich glaube, Du mußt die richtige printf library dazulinken, welche mit
Floating Point zahlen umgehen kann. Suche in der WinAVR Dokumentation
nach der printf funktion.
Warum willst Du denn Deine Variablen in Strings speichern?
Normalerweise macht man das andersrum. Die Variablen werden in float,
long, int oder char gespeichert und nur zur Ausgabe in einen String
gewandelt.
Eine double Variable braucht nur 8 Bytes, in "159.9568" befinden sind
schon 9 Bytes. Einen String in eine float zu wandeln ist auch ziemlich
rechenintensiv.
char string[20];
double kmh = 15.2569;
// für die Zahl mit 3 Nachkommastellen
sprintf(string, "V: %6.3f km/h", kmh);
// oder
dtostrf(kmh, 2, 3, string);
lcd_string(string);