mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel Studio berechnet Programmgröße falsch?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere seit einiger Zeit Assembler. Mir ist aber aufgefallen 
das die Programmgröße in Atmel Studio kleiner als in avrdude ist.

Build zeigt folgendes an:
"ATmega328P" memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
[.cseg] 0x000000 0x000084     78      0     78   32768   0.2%
78 bytes

Wenn ich die Datei in avrdude lade steht aber:
avrdude: input file stepper.hex auto detected as Intel Hex
avrdude: writing flash (132 bytes):

also doch 132 bytes?

Was stimmt jetzt?

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hänge doch mal die HEX-Datei an. Wie rufst Du avrdude auf?

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Max schrieb:

> Was stimmt jetzt?

Der Witz ist: Beides.

Das Studio zählt die tatsächlich benutzten Bytes, avrdude hingegen die 
Zahl der Bytes zwischen der ersten benutzten Adresse und der letzten 
benutzten Adresse.

Oder anders ausgedrückt: wenn du auf jegliche Verwendung von .ORG in 
deinem Assemblerprogramm verzichtest, sollten beide Tools exakt dieselbe 
Größe anzeigen.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:

> Das Studio zählt die tatsächlich benutzten Bytes

Ergänzung:

Das war zumindest mal der Plan der Verfasser des Assemblers. Mit dem 
Asm2 wurde aber etliche neue Direktiven eingeführt, speziell auch 
.OVERLAP.

Bei der Zählung der benutzten Bytes wurde das damit mögliche Szenario 
aber nicht korrekt umgesetzt, d.h.: wenn es tatsächlich zum Overlap 
kommt, werden die benutzten Bytes des überlappenden Bereichs mehrfach 
gezählt.

Toller Trick, man kann auf diesem Weg viele Megabytes in den kleine AVRs 
unterbringen. Naja, wenn da nicht noch die genauso dumme Fit-Kontrolle 
wäre, die nicht etwa prüft, dass kein Byte ausserhalb des verfügbaren 
Adressbereichs liegt, sondern statt dessen einfach die Summe der 
"benutzten" Bytes gegen die Gesamtzahl der verfügbaren Bytes. So kann es 
passieren, dass ein völlig legales Programm angeblich nicht mehr in den 
Speicher passt...

Fazit: .OVERLAP nicht benutzen, wenn man nicht ganz genau verstanden 
hat, was das tut...

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:

> Oder anders ausgedrückt: wenn du auf jegliche Verwendung von .ORG in
> deinem Assemblerprogramm verzichtest, sollten beide Tools exakt dieselbe
> Größe anzeigen.

Ok, danke. Es liegt also an meiner Interrupt Routine:
.org 0x000
  rjmp main

.org OC0Aaddr
  rjmp oc


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.

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