Zeile 1: | Zeile 1: | ||
{{Baustelle|SprinterSB}} | {{Baustelle|SprinterSB}} | ||
+ | |||
+ | =Flash- und statischer RAM-Verbrauch = | ||
+ | Das geht nicht mit <tt>avr-gcc</tt>, sondern mit Werkzeugen, die zu den Binutils gehören und z.B bei [[WinAVR]] dabei sind. | ||
+ | |||
+ | Abhängig von der Section schlägt ihr Platzverbrauch in Flash/SRAM/EEPROM zu Buche: | ||
+ | <center> | ||
+ | {| {{Blauetabelle}} | ||
+ | |+ '''Tabelle: Zuordung des Platzberbrauchs zur Section-Größe''' | ||
+ | |- {{Hintergrund1}} | ||
+ | ! |belegter Speicher || Sections (Einzelgrößen addieren) ||Beschreibung | ||
+ | |- | ||
+ | |Flash || <tt>.text</tt> + <tt>.data</tt> || Programmcode und Tabelle für initialisierte Daten | ||
+ | |- | ||
+ | |SRAM || <tt>.data</tt> + <tt>.bss</tt> + <tt>.noinit</tt>|| Daten (initialisiert, zu 0 initialisiert, nicht initialisiert) | ||
+ | |- | ||
+ | |EEPROM ||<tt>.eeprom</tt> ||Daten, die man ins EEPROM gelegt hat | ||
+ | |} | ||
+ | </center> | ||
+ | |||
+ | '''Beispiele:''' | ||
+ | |||
+ | Verbrauch der einzelnen Module auflisten: | ||
+ | > avr-size -x foo1.o foo2.o ... | ||
+ | |||
+ | Verbrauch des gesamten Programms auflisten: | ||
+ | > avr-size -x -A foo.elf | ||
+ | |||
+ | Platzverbrauch von Funktionen, Objekten, etc. nach Größe sortiert: | ||
+ | > avr-nm --size-sort -S foo.elf | ||
+ | |||
+ | =Dynamischer RAM-Verbrauch= | ||
;<tt>mem-check.h</tt> | ;<tt>mem-check.h</tt> |
Version vom 3. März 2006, 17:31 Uhr
An diesem Artikel arbeitet gerade Mitglied SprinterSB.
Am besten momentan noch keine gravierenden Ergänzungen / Änderungen vornehmen. Dieser Hinweis verschwindet wenn der Autor soweit ist. Sollte dieser Hinweis länger als drei Tage auf einer Seite sein, bitte beim Autor SprinterSB per PM / Mail oder Forum nachfragen ob er vergessen wurde. |
Flash- und statischer RAM-Verbrauch
Das geht nicht mit avr-gcc, sondern mit Werkzeugen, die zu den Binutils gehören und z.B bei WinAVR dabei sind.
Abhängig von der Section schlägt ihr Platzverbrauch in Flash/SRAM/EEPROM zu Buche:
belegter Speicher | Sections (Einzelgrößen addieren) | Beschreibung |
---|---|---|
Flash | .text + .data | Programmcode und Tabelle für initialisierte Daten |
SRAM | .data + .bss + .noinit | Daten (initialisiert, zu 0 initialisiert, nicht initialisiert) |
EEPROM | .eeprom | Daten, die man ins EEPROM gelegt hat |
Beispiele:
Verbrauch der einzelnen Module auflisten:
> avr-size -x foo1.o foo2.o ...
Verbrauch des gesamten Programms auflisten:
> avr-size -x -A foo.elf
Platzverbrauch von Funktionen, Objekten, etc. nach Größe sortiert:
> avr-nm --size-sort -S foo.elf
Dynamischer RAM-Verbrauch
- mem-check.h
#ifndef _MEM_CHECK_H_ #define _MEM_CHECK_H_ extern unsigned short get_mem_unused (void); #endif /* _MEM_CHECK_H_ */
- mem-check.c
#include <avr/io.h> // RAMEND #include "mem-check.h" // Mask to init SRAM and check against #define MASK 0xaa // From linker script extern unsigned char __heap_start; unsigned short get_mem_unused (void) { unsigned short unused = 0; unsigned char *p = &__heap_start; do { if (*p++ != MASK) break; unused++; } while (p <= (unsigned char*) RAMEND); return unused; } /* !!! never call this function !!! */ void __attribute__ ((naked, section (".init8"))) __init8_mem (void) { __asm volatile ( "ldi r30, lo8 (__heap_start)" "\n\t" "ldi r31, hi8 (__heap_start)" "\n\t" "ldi r24, %0" "\n\t" "ldi r25, hi8 (%1)" "\n" "0:" "\n\t" "st Z+, r24" "\n\t" "cpi r30, lo8 (%1)" "\n\t" "cpc r31, r25" "\n\t" "brlo 0b" : : "i" (MASK), "i" (RAMEND+1) ); }