Not enough RAM

OP #1678765
Lesenswert?

Hallo,

als ich meine Firmware eines PIC16F876 um eine Funktion erweitert habe 
kommt die Fehlermeldung "Not enough RAM for all variables" zurück.

Dabei lag die Auslastung des RAMs vor der Erweiterung bei 44%!

Die zusätzliche Funktion sieht folgendermaßen aus:

putc(com);
putc(0);
putc(SC);

var=(float)wert*(0.004882813);    // 5V/1024 = 0.004882813

      var = var - off;

      sprintf(ascii,"%3.3f V",var);

      i=0;
          while ( ascii[i] != 0 )
           {
             putc( ascii[i++] );
           }

putc(CR);
break;



Gruß
Gast #1678835
Lesenswert?

Andi C. schrieb:
> Das Problem ist das ich keine Ganzzahl verwenden kann weil ich wegen der
> Genauigkeit eine Kommazahl benötige und eine float-to-ascii Funktion
> gibt es ja leider nicht.

Oh doch, das kannst du. Beispielsweise indem du in Millivolt anstatt in 
Volt rechnest :-)
Gast #1678874
Lesenswert?

>Eine 32 Bit Fließkommazahl ist nicht genauer als eine 32Bit
>Festkommazahl.

Stimmt, die ist sogar schlechter nach IEEE 754 sind nur 23 bit für die 
Mantisse. Aber man hat einen größeren Wertebereich, den man nicht 
braucht :)
Gast #1678882
Lesenswert?

Simon K. schrieb:
> Eine 32 Bit Fließkommazahl ist nicht genauer als eine 32Bit
> Festkommazahl

Der ADC hat doch nur 10 Bit (Auflösung nicht Genauigkeit).

In Andis Fall ist die Rechnung mit Festkommaarithmetik sogar besonders 
einfach:
Er braucht nur eine 16-Bit-Variable und Multiplikation mit Faktor 2 
sowie Faktor 10.

1. Schritt: Multiplikation mit 2 und 10 (also gesamt Faktor 20).
Dadurch wird der ADC-Bereich auf Hexadezimal 0x5000 normiert.

Im High-Nibble steht schon der 1. BCD-Wert (Ganze Volt) für die 
Umwandlung nach ASCII. (Addition von 0x30)

2. Schritt: Einfügen des Kommas in die Ausgabe.

3. Schritt: abziehen des High-Nibble von der 16 Bit Zahl.
4. Schritt: Multiplikation vom Rest mal 10
   Im High - Nibble steht dann die nächste Ziffer als BCD.
5. Weiter bei Schritt 3 bis die notwendige Auflösung ausgegeben ist.

Gruß Anja

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