mikrocontroller.net

Forum: Compiler & IDEs Speicherverschwendung?


Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich printf, oder hast du noch andere Dateien in der Makefile
angegeben ?

Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.