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.
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....
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.
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/Speicherverbrauch_bestimmen_mit_avr-gcc /Skasko
OK, Eure Beiträge haben mir weitergeholfen :-) Danke für Euren super schnnellen Support! Gruss Gunb
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.