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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.