Speicherverschwendung?

Gast #237759
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?
Gast #237761
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.
Moderator Persönliche Seite #237762
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.