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


von Christian (Gast)


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

von Rufus T. Firefly (Gast)


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.

von Christian (Gast)


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 ?

von Rufus T. Firefly (Gast)


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.

von Christian (Gast)


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.

von Rufus T. Firefly (Gast)


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?

von Christian (Gast)


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.

von T.Stütz (Gast)


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

von Rufus T. Firefly (Gast)


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.

von Christian (Gast)


Lesenswert?

Ende gut alles gut

von Hobbes (Gast)


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.

von rene (Gast)


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é

von Rufus T. Firefly (Gast)


Lesenswert?

Dann such doch mal in allen Dateien im include-Verzeichnis nach dem
Funktionsnamen:

findstr "ftoa" include\*.h

von rene (Gast)


Lesenswert?

Hallo Rufus

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

Danke René

von Winne (Gast)


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.

von Winne (Gast)


Lesenswert?

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

von Bob (Gast)


Lesenswert?

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

von Winne (Gast)


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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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

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.