www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik codeVisionAVR "ftoa"-Befehl


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus Leute,
ich habe ein kleines Problem mit meinem CVAVR C-Compiler. Wenn ich int
in char umwandeln möchte und dieses dann auch auf einem LCD anzeigen
möchte, so ist dies kein Problem (itoa befehl).
Nun möchte ich aber float in char umwandeln und anzeigen lassen
(ftoa-befehl). Dies funktioniert jedoch nicht. Auch die Ausgabe ans
Terminal funktioniert nicht. Jedoch kann ich z.B. intern mit dem
float-wert rechnen, musss ihn dann in int umwandeln und kann ihn dann
anzeigen.
Wer kennt dieses Problem bzw. dessen Lösung.
P.s.: ich arbeite mit dem stk500 mit ATmega8535 Prozessor und wie oben
beschrieben mit der CodeVision-Software.

Vielen Dank schon im voraus für eure Hilfe

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Nun möchte ich aber float in char umwandeln und anzeigen
  lassen (ftoa-befehl)."

So weit, so gut.

  "Dies funktioniert jedoch nicht."

Was heisst das?

  "Auch die Ausgabe ans Terminal funktioniert nicht."

Auch hier: Was heisst das?

"Funktioniert nicht" ist die präziseste aller möglichen
Fehlerbeschreibungen. Da weiß jeder sofort ganz genau, was schief
geht.



Übrigens hast Du Dir den falschesten aller Foren-Bereiche für Deinen
Beitrag ausgesucht.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Nun möchte ich aber float in char umwandeln und anzeigen
  lassen (ftoa-befehl)."

So weit, so gut.

  "Dies funktioniert jedoch nicht."


Soll heißen: keine Ausgabe auf dem LC-Display


"Auch die Ausgabe ans Terminal funktioniert nicht."

Auch hier: Es kommt nichts am Terminal an


"Übrigens hast Du Dir den falschesten aller Foren-Bereiche für Deinen
Beitrag ausgesucht."

Wo soll ich denn bitteschön mein Posting hinschicken ?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fangen wir mit der letzten Frage an:

http://www.mikrocontroller.net/forum/list-2-1.html
oder allgemeiner
http://www.mikrocontroller.net/forum/list-1-1.html

Dieser Forenbereich scheint jedenfalls eher für administrative
Hinweise, Verbesserungsvorschläge und ähnliches vorgesehen zu sein;
mehr darüber weiß sicherlich Andreas, der sich das ganze ja ausgedacht
hat.

ftoa gibt nirgendwohin was aus, weder auf LC-Displays noch auf
Terminals, ftoa beschreibt lediglich einen zur Verfügung zu stellenden
Speicherbereich mit einigen Bytes Text.

Soweit ist das Verhalten also -vermutlich- völlig korrekt.

Du könntest beispielsweise mal ein Quellcodefragment posten, nämlich
wie exakt Du ftoa aufrufst und wie die beteiligten Variablen definiert
sind, Du könntest aber auch einfach mal im Debugger nachsehen, was
genau passiert.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr geehrter Herr Oberschlau,
natürlich wandelt der Befehl ftoa nur um und gibt nichts auf dem LCD
aus; das ist mir völlig klar. Der Quellcode sieht dann in etwa wie
folgt aus:

char *string;
float abc=23.45;

ftoa(abc,2,string);
lcd_puts(string);

P.s.: Bitte nur Antworten auf mein Problem und keine dumme, primitiven
Anmachen.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann so nicht funktionieren:

  char *string;
  float abc=23.45;

  ftoa(abc,2,string);
  lcd_puts(string);

string ist ein nicht initialisierter char-Pointer. ftoa erwartet als
drittes Argument einen Pointer, der auf einen beschreibbaren
Speicherbereich verweist.

Versuch' mal:

  char string[10];
  float abc=23.45;

  ftoa(abc,2,string);
  lcd_puts(string);

oder meinetwegen

  char buffer[10];
  char *string;
  float abc=23.45;

  string = buffer;

  ftoa(abc,2,string);
  lcd_puts(string);


Mir ist allerdings nicht ganz klar, warum ich Dir überhaupt helfe - da
Du ja bereits recht zurückhaltend formulierte Fragen als dumme Anmache
ansiehst.

Statt mich einen Herrn Oberschlau zu titulieren, lies' Dir einfach mal
ein Buch* über C durch: Kernighan & Ritchie, Programmieren in C, zweite
Auflage, Hanser Verlag


*) Textbaustein. Und vielleicht doch ins Wiki?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,
die gute Nachricht zuerst: es funktioniert; ich kann jetzt float in
char umwandeln und anzeigen lassen.

@Rufus: Vielen Dank für die Hilfe. Wenn ich dich als Herr Oberschlau
tituliert habe, dann lag dass vielleicht auch an deiner Art posting zu
beantworten (vor allem, dass der ftoa Befehl nichts ans LCD ausgibt, *)
Textbaustein). Soll heißen, ich lass mich nicht gerne als Vollidiot
denunzieren.
Trotzdem möchte ich mich formal entschuldigen.

P.s.:
Ich habe mir jetzt die Vollversion von CodeVisionAVR zugelegt sowie das
Buch "AVR-Risc Mikrocontroller" von Wolfgang Trampert. Ein
Nachschlagewerk für C besitze ich bereits.

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christian
versuch auch mal die <math.h> zu includen ...
@Rufus T. Firefly
Bitte nicht bös nehmen - verweis doch auf die Buchtipps (ist einfach
kürzer)
Ich habs seither nicht gesehen
Gruss und lasst euch nicht ärgern

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christian: Ein Missverständnis.
Die Fußnote sollte nicht erklären, was ein Buch ist (das nicht zu
wissen unterstelle ich nur seltenst), sondern bezog sich darauf, daß
ich genau dieses Buch in den letzten Tagen häufiger Leuten zur
Literatur nahegelegt habe und daher die Literaturangabe ein
Textbaustein sein soll.
Ein Buch, das ein Textbaustein ist, kommt aus dem Data Becker-Verlag
... (das ist eine Form von Literaturkritik)

Zu meine Aussage, daß ftoa nichts auf LC-Displays oder Terminals
ausgibt, stehe ich allerdings nach wie vor. Du hättest Dir das Leben
vereinfachen können, indem Du geschrieben hättest, daß ftoa den
übergebenen String nicht mit Inhalt füllt ...
(Wobei, je nach -zufälliger- Adresse können auch die spannendsten
Nebeneffekte auftreten, dank des memory-mapped I/O der AVRs kann man
auf diese Art und Weise auch Peripheriezugriffe durchführen).

Immerhin: Dir wurde geholfen.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ende gut alles gut

Autor: Hobbes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein kurzer Nachtrag.
1. Bisweilen vermisse ich in diesem Forum den Versuch, sich in das
Problem des Threadautors hineinzuversetzen. Dann werden schnell die
Glaskugeln ... bemüht, was

2. schnell zum Verlust er guten Sitten führt. Uns allen Stünde etwas
mehr Toleranz und etwas weniger Hochmut und Arroganz ganz gut an.
Ich denke dann hätten wir alle mehr von diesem Forum.

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alle

ich möchte ebenfalls eine Floatzahl in einen String umwandeln, aber
mein avrgcc (winavr20040720) kennt die Funktion ftoa nicht. math.h und
stdlib.h sind inkludiert.

Muss man die Funktion erst noch selbst definieren??

Danke für die Hilfe im Voraus

René

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann such doch mal in allen Dateien im include-Verzeichnis nach dem
Funktionsnamen:

findstr "ftoa" include\*.h

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus

Wir haben stdlib und math durchgeschaut und dort steht sie nicht drin.
Hast Du sie denn?

Danke René

Autor: Winne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leider stehe ich gerade heute vior dem seben problem wie dikuh orm
neuuen tor, und kriegs auch nicht in die birne
ein funtionierender codeschnipsel und ich raffs villeicht insbesondere
weis ich nicht was soll mir die "2" als 2.parameter bedeuten. Und
muss der zeger auf ddas char array tatschlich selbst ein char
arraydarstellen oder einen pointer im integerformat? kopfkratze und
grüble.

Autor: Winne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry ich komme heute auch mit meiner tastatur nicht klar (tevion
drathlos)

Autor: Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@winne
Die 2 gibt an wieviel Nachkommastellen umgewandelt bzw. berechnet
werden.
Ansonsten nimm den Code der weiter oben gepostet wurde.
Gruß Bob

Autor: Winne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich gemacht.
Und prompt ist der Code 1123 worte lang geworden: Essig.  Beim 2313 ist
bei 1024*16bit Ritze. Jetzt heisst es reduzieren ohne am prog abstriche
zu machen.
danke trotzdem.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tjo, ist wohl die float Implementation schuld. Gehts nicht mit normalem
Integer? (itoa)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.