mikrocontroller.net

Forum: Compiler & IDEs avr-size und RAM Verbrauch anzeigen


Autor: Gunb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich lese ca. 3000 Bytes über SPI in ein Array ein und sende diese erst 
dann über den UART an den PC. Als Controller kommt ein Mega128 zum 
Einsatz. Die Firmware funktioniert soweit.

Meine main sieht so aus:

void main (void)
{
  uint8_t byArr[3000];
  uint16_t wCnt=0;

  USART1_Init( 25 );
  Init_Slave();

  USART1_Transmit('C');

  while(wCnt<3000)
   byArr[wCnt++]=Slave_Receive();

  byArr[2999]='Z';

  wCnt=0;

  while(wCnt<3000)
   USART1_Transmit(byArr[wCnt++]);

  while(1);
}

Frage: Wenn ich nun mit avr-size -C --mcu=atmega128 <filename>.elf den 
RAM Verbrauch anzeigen lassen möchte, dann bekomme ich unter 'Program´ 
440bytes und unter 'Data' 0bytes angezeigt.

Setze ich 'static' vor das 3000 byte Array, dann stimmt die Anzeige mit 
3000bytes bei 'Data'.

Warum ist das so? Wo steckt der Compiler denn die 3000 Byte für das 
Array hin, wenn ich 'static' weglasse? Sie müssen doch irgendwo alle 
zwischengespeichert und damit auch von avr-size erfasst werden, oder?

Danke für Support.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit den genauen Begriffen kenne ich mich auch nicht so aus, aber alles 
was nicht außerhalb irgendeiner Funktion deklariert wird, wird erst bei 
betreten der Funktion auf dem Heap oder Stack gespeichert. Da dies 
dynamisch ist, wird dies nicht erfasst weil es davor nicht festgelegt 
ist.

Wenn man static davor schreibt werden die Daten direkt im sram an einer 
"statischen" Position gespeichert. Dort sind die Daten die ganze Zeit 
und werden deshalb bei der Ausgabe erfasst....

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das RAM ist üblicherweise in ggf. RAM-Vektoren, initialisierte Daten 
(DATA), nichtinitialisierte Daten (BSS), ggf. je nach Library 
Heapbereich (für malloc(),...) und Stackbereich aufgeteilt.

Mit static und ohne Initialisierungswerte kommt das Array in die BSS 
Sektion. Ohne static landet es üblicherweise auf dem Stack.

Autor: Skasko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schau Dir doch mal diese Seite an. Sie enthält eine nette Routinne, den 
dynamischen Speicherverbrauch zu messen.


http://www.roboternetz.de/wissen/index.php/Speiche...

/Skasko

Autor: Gunb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK,

Eure Beiträge haben mir weitergeholfen :-)

Danke für Euren super schnnellen Support!

Gruss
Gunb

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.