www.mikrocontroller.net

Forum: Compiler & IDEs Maximale Programm-Größe laut size-of


Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe einen Atmel MEGA 8-16. Ich benutze das Tool size-of und habe 
während des Programmierens und Testen mit der Schaltung bemerkt, dass 
wenn die Speicherbelegung 92% übersteigt, der µC auf einmal zum spinnen 
anfängt. Lösche ich dann eine Code-Zeile (die das wirklich nicht 
auslösen kann ;)), dann funktioniert alles wieder einwandfrei.
Jetzt wollte ich mal fragen wie weit man einen µC mit Daten füllen kann 
bzw. inwieweit man sich auf die Speicherbelegungsanzeige von sizeof 
verlassen kann?

Hier ist meine:

Size after:
main.elf  :
section     size      addr
.text       7116         0
.data         40   8388704
.bss         133   8388744
.stab      11016         0
.stabstr    5523         0
Total      23828


AVR Memory Usage:
-----------------
Device: atmega8

Program:    7156 bytes (87.4% Full)
(.text + .data + .bootloader)

Data:        173 bytes (16.9% Full)
(.data + .bss + .noinit)

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du die Optimierung (-O) nicht angeschaltet, und in der einen 
Code-Zeile steht zufällig "_delay_us(...)" o.ä.?
Dann wird die Floating-Point Library dazu gelinkt...
Ansonsten: poste mehr Info (Compiler version, Entwicklungsumgebung, 
etc...)

-Os Jörg

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Optimierung ist in der Makefile auf OPT = s, also auf Größe optimieren.

_delay_ms hab ich auch schon an anderen Stellen wie für die 
Initialisierung des LCD verwendet, dann müsste die eine Library immer 
schon dazugelinkt werden.


Das ist der ganze Auszug:

-------- begin --------
avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is 
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.



Size before:
main.elf  :
section     size      addr
.text       7116         0
.data         40   8388704
.bss         133   8388744
.stab      11016         0
.stabstr    5523         0
Total      23828


AVR Memory Usage:
-----------------
Device: atmega8

Program:    7156 bytes (87.4% Full)
(.text + .data + .bootloader)

Data:        173 bytes (16.9% Full)
(.data + .bss + .noinit)



Creating load file for EEPROM: main.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
  --change-section-lma .eeprom=0 -O ihex main.elf main.eep
c:\Programme\WinAVR\bin\avr-objcopy.exe: there are no sections to be 
copied!
c:\Programme\WinAVR\bin\avr-objcopy.exe: --change-section-lma 
.eeprom=0x00000000 never used
make.exe: [main.eep] Error 1 (ignored)

Converting to AVR Extended COFF: main.cof
avr-objcopy --debugging --change-section-address .data-0x800000 
--change-section-address .bss-0x800000 --change-section-address 
.noinit-0x800000 --change-section-address .eeprom-0x810000 -O 
coff-ext-avr main.elf main.cof
Warning: file C:/WINDOWS/TEMP/ccaXm0WJ.s not found in symbol table, 
ignoring
Warning: ignoring function __vectors() outside any compilation unit
Warning: ignoring function __bad_interrupt() outside any compilation 
unit
avr-objcopy: --change-section-vma .eeprom+0xff7f0000 never used
avr-objcopy: --change-section-lma .eeprom+0xff7f0000 never used
avr-objcopy: --change-section-vma .noinit+0xff800000 never used
avr-objcopy: --change-section-lma .noinit+0xff800000 never used


Size after:
main.elf  :
section     size      addr
.text       7116         0
.data         40   8388704
.bss         133   8388744
.stab      11016         0
.stabstr    5523         0
Total      23828


AVR Memory Usage:
-----------------
Device: atmega8

Program:    7156 bytes (87.4% Full)
(.text + .data + .bootloader)

Data:        173 bytes (16.9% Full)
(.data + .bss + .noinit)


-------- end --------


> Process Exit Code: 0
> Time Taken: 00:01

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang wrote:
> wenn die Speicherbelegung 92% übersteigt, der µC auf einmal zum spinnen
> anfängt. Lösche ich dann eine Code-Zeile (die das wirklich nicht
> auslösen kann ;)), dann funktioniert alles wieder einwandfrei.

Wahrscheinlich wächst der Stack an irgendeiner Stelle in den Heap 
herein, dann kann es zu allerlei merkwürdigem Verhalten kommen.

Du verwendest zwar statisch nur 173 Bytes RAM, wenn Du aber noch 
malloc() oder große Arrays innerhalb von Funktionen verwendest, kann es 
leicht zu Problemen kommen. In bestimmten Situationen reicht da schon 
eine kleine Code-Änderung.

Gruß,
Roland

Autor: Der Techniker (_techniker_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Roland Riegel:

Aber das hat doch nichts mit dem Flash-Speicher zu tun..?!?

Gruß,
Techniker

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, natürlich nicht. Der Fehler wird aber meiner Meinung nach zu 99,9% 
auch nichts mit dem Flash zu tun haben, egal wie groß dessen Belegung 
ist.

Was mich schon eher stutzig macht, sind die Warnungen, die avr-objcopy 
ausspuckt. Aber dafür kenne ich sein Setup zu wenig, um da irgendwas 
sagen zu können.

Gruß,
Roland

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau willst du da wissen?

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.