www.mikrocontroller.net

Forum: Compiler & IDEs Speicherverbrauch(RAM) & Datentypen-Problem


Autor: Richard Rudolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab mal ein paar Fragen:

1. Wie ermittle ich den Speicherverbrauch(RAM) eines C-Programms?
Also nicht die Größe des Codes, sondern die letztendlich vom laufenden 
Programm maximal benötigte Speichergröße.
Zusammenzählen der von den globalen Variablen verbrauchten Bytes ist 
einfach, aber wie sieht es mit dem Stack etc. aus?
Und was passiert, falls der µC an die Grenze seines RAM stößt? Wirds 
undefiniert oder macht der einen sauberen Reset?

----


2. Wie viele Bytes sind die Datentypen "Float" und "Double" bei WinAvr 
und AtMega16 groß? Und wie groß ist der jeweilig verwendbare 
Wertebereich der Datentypen?

Konkret geht es um folgende Funktion:

vsolly = vsoll*labs(ysoll-y_act_ok)
        /sqrt((xsoll-x_act_ok)*(xsoll-x_act_ok)
             +(ysoll-y_act_ok)*(ysoll-y_act_ok));

welche dank irgendeinem Wertüberlauf nur Mist produziert und damit einen 
Portalroboter unsanft durch die Gegend schickt.
ysoll und y_act_ok sind als 32-Bit-Variablen(unsigned int32) gespeichert 
und können dabei Werte von ca. 2.700.000 bis ca. 3.300.000 annehmen, 
während vsoll zwischen 0 und 128 groß ist.

Ich weiß, einen 8-Bitter soll man nicht mit so großen Zahlen quälen, 
aber hier geht es leider nicht anders... ;-)

Vielen Dank schonmal im Voraus für die Hilfe.

MfG,
Richard

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1. Wie ermittle ich den Speicherverbrauch(RAM) eines C-Programms?
> Also nicht die Größe des Codes, sondern die letztendlich vom laufenden
> Programm maximal benötigte Speichergröße.

Im Prinzip kann man den Wert nicht in allen Fällen bestimmen, weil
es klarerweise immer davon abhängt welchen Weg das Programm
durch seine Funktionen nimmt. Je nachdem kann der Speicherverbrauch
sehr unterschiedlich (bis hin zu unendlich) sein.

> Und was passiert, falls der µC an die Grenze seines RAM stößt? Wirds
> undefiniert oder macht der einen sauberen Reset?

undefiniert.
Alles Mögliche kann passieren.

>
> ----
>
>
> 2. Wie viele Bytes sind die Datentypen "Float" und "Double" bei WinAvr
> und AtMega16 groß? Und wie groß ist der jeweilig verwendbare
> Wertebereich der Datentypen?

Probiers aus:
  sizeof  liefert dir die Grösse in Bytes

  sizeof( double )
  sizeof( float )

float hat auf einem AVR eine Größe von 4 Bytes. double wird
ebenfalls mit 4 Bytes gerechnet. Von der Rechengenauigkeit
macht es also auf einem AVR keinen Unterschied ob man double
oder float benutzt.

>
> Konkret geht es um folgende Funktion:
>
> vsolly = vsoll*labs(ysoll-y_act_ok)
>         /sqrt((xsoll-x_act_ok)*(xsoll-x_act_ok)
>              +(ysoll-y_act_ok)*(ysoll-y_act_ok));
>
> welche dank irgendeinem Wertüberlauf

Dann finde den Überlauf raus.
Teile die Formel in Einzelteile auf und schau dir an
welches Teilergebnis den Überlauf verursacht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.