Forum: Compiler & IDEs Speicherverschwendung?


von JarJar (Gast)


Lesenswert?

Hi,
ich fange gerade an etwas mit der AVRlib zu arbeiten und bin etwas
stutzig geworden. Folgendes Programm:

//----- Include Files
---------------------------------------------------------
#include <avr/io.h>    // include I/O definitions (port names, pin 
names,
etc)
#include <avr/signal.h>  // include "signal" names (interrupt names)
#include <avr/interrupt.h>  // include interrupt support
#include <avr/pgmspace.h>

#include "global.h"    // include our global settings
#include "uart.h"    // include uart function library
#include "rprintf.h"  // include printf function library
#include "timer.h"    // include timer function library

int main(void)
{

    while(1)
    {
    }
}

Ergibt folgende Speicherbelegung:

AVR Memory Usage:
-----------------
Device: atmega16

Program:    4562 bytes (27.8% Full)
(.text + .data + .bootloader)

Data:        202 bytes (19.7% Full)
(.data + .bss + .noinit)

4562 Bytes für ein Programm das noch nichts macht außer in einer
Endlosschleife zu hängen finde ich etwas arg viel. Was knallt denn da
so übermäßig den Speicher zu? rprintf?

von Benedikt (Gast)


Lesenswert?

Vermutlich printf, oder hast du noch andere Dateien in der Makefile
angegeben ?

von JarJar (Gast)


Lesenswert?

Aber das kann doch echt nich sein das nur durch ein paar Includes schon
so viel Speicher belegt wird. Wie ist das dann erst wenn man
"richtige" Libs included? zb FAT und MMC oder TCP/IP. Finde ich
bedenklich.
Das Makefile hab ich aus einem von dem Tool "mfile" und einem von
einem AVRlib Example zusammengebastelt, wobei ich das von mfile als
Basis genommen hab und nur ein paar Zeilen geändert hab.
Es gibt aber keinen Unterschied ob ich mein modifiziertes HexFile oder
ein original AVRlib Makefile nehme. Beide Hex Files haben die gleiche
Größe

Im Makefile hab ich folgendes:

SRC = $(TARGET).c
SRC +=$(AVRLIB)/buffer.c
SRC +=$(AVRLIB)/uart.c
SRC +=$(AVRLIB)/rprintf.c
SRC +=$(AVRLIB)/timer.c
SRC +=$(AVRLIB)/stxetx.c

Wenn ich das auskommentiere wirds weniger, irgendwo klar. Aber kann man
das nicht besser machen? Ich kloppe mir mit jedem Sourcefile den
Speicher voll und brauche vielleicht nur nen kleinen Teil davon.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Aber das kann doch echt nich sein das nur durch ein paar Includes
> schon so viel Speicher belegt wird.

Von denen wird auch gar nichts an Speicherbelegung generiert
(jedenfalls nicht, wenn sie ordentlich gebaut sind).  Die deklarieren
ja nur Interfaces.

> Im Makefile hab ich folgendes:

(Alle möglichen Quelldateien eingebunden.)

> Wenn ich das auskommentiere wirds weniger, irgendwo klar. Aber kann
> man das nicht besser machen? Ich kloppe mir mit jedem Sourcefile den
> Speicher voll und brauche vielleicht nur nen kleinen Teil davon.

Tja, dann binde nur die Sourcefiles ein, die du brauchst.

Ansonsten siehe Rolfs Thread über Libraries.  Aus einer echten Lib
werden nur die Sachen gelinkt, die auch gebraucht werden, aber immer
noch auf der Ebene von Objektmoduln, und diese wiederum haben eine
1:1-Zuordnung zu Quelldateien.  Wenn du nur Teile einer Quelldatei
brauchst, musst du diese funktionsweise zerstückeln, einzeln
compilieren und dann in eine Lib reinnageln.

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
Noch kein Account? Hier anmelden.