Forum: Mikrocontroller und Digitale Elektronik sprintf funktioniert nicht


von Alex X. (behindi)


Lesenswert?

Hallo erst mal, und im Voraus danke für jegliche Hilfe.

Ich hab nen Problem beim eine float zahl in einen String reinschreiben.

Das ist das Programm, das ich zum Testen geschrieben hab.
1
#include "p18f452.h"
2
#include "delays.h"
3
#include "stdlib.h"
4
#include "math.h"
5
6
void main (void)
7
{
8
9
float AD2_result;
10
char AD2[5];
11
12
LATD=0x00;
13
TRISD=0x00;
14
15
AD2_result=123.4;
16
17
Delay1KTCYx(1);
18
19
sprintf(AD2,"%3.1f",AD2_result);
20
21
LATD=AD2[0];
22
23
Delay1KTCYx(1);
24
25
while(1);
26
27
}

An PORTD sind LED's angeschlossen welche dann den Inhalt der 
Kommponennte [0] vom char AD2 anzeigen sollen.

Es tut sich leider gar nichts, hab auch alle Komponennten durchgetested 
(AD2[0] bis AD2[4])
Die Hardware hab ich getestet und sie funktioniert, also es ligt sicher 
an der Software.


es wäre super wenn mir jemand weiterhelfen könnte

mgf

alex

von Johann L. (radiostar)


Lesenswert?

> sprintf(AD2,"%3.1f",AD2_result);

schreibt 5 chars + die abschliesende \000 in ein Array, das nur 5 Bytes 
aufnehmen kann.

von Pedro (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/FAQ

Stichwort: Aktivieren der Floating Point Version

Schon gelesen?

von Alex X. (behindi)


Lesenswert?

Danke ich hab das Array nun auf 10 Kommponenten vergrößert

char AD2[10];

Es tut sich jedoch immer noch nichts :(

Stichwort: Aktivieren der Floating Point Version,

Da steht nur was WinAVR/AVR-Studio und ich verwende den MPLAP C18 
compiler.


Danke

mgf

von Markus R. (maggus)


Lesenswert?

Wenn im Array "123.4" stehen soll muss der format-string "%5.1f" oder 
einfach nur "%.1f" (anzeige mit einer nachkommastelle) sein. Lies den 
o.g. FAQ-Link, da steht die Formatierung bei float-Ausgabe beschrieben.

Ist der Stack groß genug? Die printf-Funktionen sind sehr 
speicherhungrig.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Pedro schrieb:
> http://www.mikrocontroller.net/articles/FAQ
>
> Stichwort: Aktivieren der Floating Point Version
>
> Schon gelesen?

Was bringt das für PIC?

von Stefan F. (sfrings)


Lesenswert?

printf unterstützt standardmäßig keine Fließkomma-Operationen. Schau in 
die Doku der avr-libc, da steht drin, mit welcher Option Du dieses 
Feature aktivierst.

bis zu 3 Ziffern for dem Komma
+ Komma (bzw. Punkt)
+ eine Ziffer nach den Komma
+ eventuell das "-" Vorzeichen
+ String-Ende Markierung

macht zusammen bis zu 7 Bytes. So groß muss das Array mindestens sein.

von Jim M. (turboj)


Lesenswert?

> Schau in die Doku der avr-libc

Das nützt auf einem PIC nix, man sollte in die korrekte Doku - die vom 
Compiler, der liefert die CLib normalerweise mit - schauen, ob und wie 
floating point unterstützt wird.

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.