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


von Max (Gast)


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?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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

von c-hater (Gast)


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.

von c-hater (Gast)


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...

von Max (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.