Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

 
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

Baustelle.gif 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:

Tabelle: Zuordung des Platzberbrauchs zur Section-Größe
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)
	);
}

LiFePO4 Speicher Test