Ausgabe von float oder double über printf [dsPIC33fj]

Gast #3788343
Lesenswert?

Guten Tag,

ich versuche momentan float oder double zahlen mit printf übern UART 
auszugeben (Programmiersprache C).

Jedoch fängt der an zu meckern, wenn ich folgenden Programmcode anwende:

[...]
float floatvar;
printf("T1:%f",floatvar);
[...]

oder

[...]
double doublevar;
printf("T1:%Lf",doublevar);
[...]

Die Fehlermeldung:
------------------------------------------
c:\programme\microchip\mplab c30\bin\pic30-coff-ld.exe: Link Error: 
region program is full (1-Wire.cof section .text)
data_init: Link Error: Could not allocate section .dinit, size = 308 PC 
units, attributes = code
default_isr: Link Error: Could not allocate section .isr, size = 2 PC 
units, attributes = code
Link Error: Could not allocate program memory
------------------------------------------

Meine Vermutung: Der PIC hat nicht genug Speicher für diese 
Convertierung in printf.
Ich würde ungern auf float und double bei der Programmierung eines PICs 
verzichten, deshalb wäre ich für jede Hilfe dankbar!

Grüße,
Heos
#3788381
Lesenswert?

Für die Entwicklung und Einzelstücke nimmt man am Besten den größten, 
also Bei Dir den dsPIC33FJ128GP202, und schaut dann, wie viel Speicher 
man nachher tatsächlich braucht.

Bei 12k Flash (also 4 kWorten) solltest Du Dir tatsächlich float und 
double verkneifen.

fchk
Gast #3788786
Lesenswert?

Es ist sehr merkwürdig: Mein Kollege hat ein ähnliches Programm für 
diesen PIC geschrieben, jedoch hat der bei weitem mehr printf-Befehle 
ausgeführt und der hat sogar einen long double reingehauen und der 
compiliert.

Ich schätze das müsste an meinen Compilereinstellungen in MPLAB liegen.

Jedoch habe ich keine Ahnung was ich das umstellen soll.
#3789058
Lesenswert?

Heos schrieb:

> Ich schätze das müsste an meinen Compilereinstellungen in MPLAB liegen.
>
> Jedoch habe ich keine Ahnung was ich das umstellen soll.

Warum fragst Du nicht Deinen Kollegen und lässt Dir sein Projekt geben.

Das Map-File des Linkers ist auch immer eine gute Quelle. Da steht drin, 
was wie viel Speicher braucht.

Wenn Du wenig Speicher hast, solltest Du tatsächlich auf printf/scanf 
und float/double verzichten, insbesondere wenn Du keinen großen 
Dynamikbereich brauchst.

fchk
Gast #3789619
Lesenswert?

Heos schrieb:
>> Nimm einen PIC mit größerem Flash-ROM.
>
> Sorry das hat natürlich gefehlt...
>
> Es ist der dsPIC33fj12GP202. Dieser besitzt 12Kbyte Programmspeicher und
> 1Kbyte RAM

Hallo,

ich kenne das Problem vom PIC24 (was die gleiche Lib ist).

Stringfunktionen aus der PIC24/dsPIC33 Standardlib sind leider verdammt 
teuer. 1x sprintf %f ->ein paar kBit weg.

Einfachste Lösung: Bürde die "komplexen" Sachen dem PC auf. Schicke dem 
die Floats roh, der muss das dann interpretieren. Der hat genug Dampf.

Oder drehe mal die Optimierungen des XC16 auf:
Projekt->Properties->XC16->xc16-gcc->Optimizations->Optimization level
Eventuell reichts ja. Das könnte das sein, was dein Kollege gemacht hat.
Gast #3789649
Lesenswert?

Ich habe das Problem gelöst:

Ich habe die Version des C30-Compilers von mir und meinem Kollegen 
verglichen.

Das Resultat: Ich hatte eine viel zu alte Version des Compilers, der 
float und double in einem printf-Befehl nicht drauf hatte.

Die Version 3.31 vom C30-Compiler sollte es tun.
Hier zu finden:
http://www.microchip.com/pagehandler/en-us/devtools/dev-tools-parts.html


Vielen Dank für eure Antworten!

Gruß,
Heos

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren