Atmel Studio berechnet Programmgröße falsch?

Gast #5903078
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:
1
"ATmega328P" memory use summary [bytes]:
2
Segment   Begin    End      Code   Data   Used    Size   Use%
3
[.cseg] 0x000000 0x000084     78      0     78   32768   0.2%
78 bytes

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

also doch 132 bytes?

Was stimmt jetzt?
Gast #5903087
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.
Gast #5903112
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...
Gast #5903123
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:
1
.org 0x000
2
  rjmp main
3

4
.org OC0Aaddr
5
  rjmp oc

Antwort schreiben

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.

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.