Hallo zusammen, ich habe ein Problem mit der sprintf Funktion. Im Einsatz ist das AVR Studio 4.18 / Winavr 20100110 auf Atmega128 Hier ein Auszug aus dem Sourcecode: int16_t working_value; char output[40]; sprintf(output,"%4.1f sec.",(double)(working_value/10)); Obwohl das Projekt ohne Warnungen und Fehler durch den Compiler läuft wird anstelle einer Kommazahl nur ein Fragezeichen in den string "output" geschrieben. Ich gehe mal davon aus das dem WinAVR irgendwas nicht passt. Irgenwie stehe ich an der Stelle im Moment auf dem Schlauch. Kann mir einer einen Tipp geben wie ich hier weiter komme? Ein Link zum Lesen würde mir schon reichen. Gruß und Danke Dietmar
schon mal gesucht? http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio
Hallo, hast du gegen die floating point Versionen der *printf funktionen gelinkt? Bin nicht sicher ob dein cast so funktioniert... lass double weg und Teil durch 10.0 . Mal davon abgesehen, dass für die Aufgabe floating point Funktionen zu verwenden ein massiver overkill an Speicher und Rechenbedarf ist. Mach lieber sowas: sprintf(output,"%4d.%1d sec.",working_value/10,working_value%10); Beste Grüße, Stefan
ja, wird wohl die falsche Lib sein. Der (double)-cast sollte nicht das Problem sein. Dietmar schrieb: > sprintf(output,"%4.1f sec.",(double)(working_value/10)); evtl. meinst du: > sprintf(output,"%4.1f sec.",(double)(working_value/10.0)); Ansonsten werden Nachkommastellen abgeschnitten. Stefan schrieb: > Mal davon abgesehen, dass für die Aufgabe floating point Funktionen zu > verwenden ein massiver overkill an Speicher und Rechenbedarf ist. Welche Aufgabe? Ich kenne sie nicht; vielleicht weisst du mehr? Wenn man genug Flash hat und Rechenzeit auch kein Problem ist,dann sind Gleitkommazahlen und sprintf() durchaus legitim. Man muß ja keinen Programmieraufwand treiben, um die Flashbelegung von 10 auf 5% zu drücken.
Hallo zusammen, @Peter: Gesucht hatte ich, aber den Link auf die FAQ nicht gefunden :-( @All: Es war die falsche Lib. Nachdem ich die Einstellungen aus der FAQ übernommen habe läuft das so wie gewünscht. Mir war nicht bewusst das man die floating point Unterstützung extra aktivieren muß. Bin da wohl etwas MS verwöhnt/verdorben. Ist aber auch erst mein 2. Projekt auf Controller-Ebene. Danke für die Tips. Gruß Dietmar
Hallo, ich meinte damit, durch 10 zu teilen und es mit einer Stelle nach dem Komma auszugeben. Bzw. bei Divisionen durch 10er Potenzen. Das geht mit nem Modulo eben einfach schneller, und weniger speicherintensiv. Nachdem er die doubly im Funktionsaufruf ausrechnet, wird sie wohl woanders nicht mehr gebraucht, weshalb ich davon ausgegangen bin, das es die einzigste Stelle ist wo er die *printf Funktionen für doubles braucht. Freut mich auf jeden Fall, dass es jetzt geht. Beste Grüße, Stefan
Hallo Stefan, im Moment brauche ich den double wirklich nur zur Textausgabe. Da ich aber auch noch in anderen Programmteilen analoge Werte verarbeiten und ausgeben muß, wäre ich später ebenfalls auf das Problem mit der Lib gestoßen. Es war halt nur 'ne Frage der Zeit. Da ich eigentlich aus der PC-Welt komme werde ich wohl noch an so einigen Stellen über Probleme stolpern, die in Wirklichkeit keine sind. Also werde ich mich nach dem Motto "learning by doing" mal dadurch wühlen. Gruß Dietmar
Dietmar schrieb: > Also werde ich mich nach dem Motto "learning by doing" mal dadurch > wühlen. Wenn man das Tutorial mal mit Verstand liest, macht man viele Fehler erst gar nicht selbst.
Klaus Wachtler schrieb: > Wenn man das Tutorial mal mit Verstand liest, macht man viele > Fehler erst gar nicht selbst. Das ist richtig, nur manchmal sind es Kleinigkeiten die man nicht richtig verstanden hat und die einem dann Probleme bereiten. Und bevor man Stunden vor dem Rechner sitzt und nicht weiter kommt ist Fragen keine Schande. Denn: Redenden (schreibenden) Menschen kann geholfen werden, andere sterben dumm! Das Tutorial selbst ist gut gemacht. Mein Wissen über die AVR's habe ich genau daher. Ein Buch oder ander Inetseiten habe ich bisher nicht benötigt. Ich denke auch das wird in Zukunft auch nicht nötig sein. Gruß Dietmar
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.