Forum: Compiler & IDEs [AVR-GCC] gcc "rettet" ungültige Register?!


von Hanno (Gast)


Lesenswert?

Hi.

Umgebung: AVR Studio 5, avr gcc 4.5.1, Target: ATmega1284P

Mir ist aufgefallen, dass der "Stack-Verbrauch" durch gcc im Prolog von 
meinen Interrupt-Routinen größer ist, als er eigentlich sein sollte.

Erwartet hatte ich max. 33 Bytes, die der gcc sichert: r0...r31 + SREG.
Tatsächlich legt der Compiler mir in allen Optimierungsstufen 34 Bytes 
auf den Stack.
Das sieht dann in etwa so aus:
1
000000E8 1f 92                PUSH R1    Push register on stack 
2
000000E9 0f 92                PUSH R0    Push register on stack 
3
000000EA 0f b6                IN R0,0x3F    In from I/O location 
4
000000EB 0f 92                PUSH R0    Push register on stack 
5
000000EC 0b b6                IN R0,0x3B    In from I/O location 
6
000000ED 0f 92                PUSH R0    Push register on stack 
7
000000EE 11 24                CLR R1    Clear Register 
8
000000EF 2f 92                PUSH R2    Push register on stack 
9
...

oder wahlweise auch das Äquivalent
1
000000E4 00 90 5b 00          LDS R0,0x005B    Load direct from data space 
2
000000E6 0f 92                PUSH R0    Push register on stack

Wie erwartet holt der gcc das SREG aus 0x3F und sichert es auf dem 
Stack. - Nur, dasselbe macht er mit dem IO-Register 0x3B, und dieses 
Register ist im Atmel Datenblatt als "reserved" gekennzeichnet; sollte 
also eigentlich nicht verwendet werden.

Weiß jemand, wofür das gut sein soll, bzw. was es mit diesem IO-Register 
auf sich hat?
Lässt sich das irgendwie abstellen, ohne den gcc zu patchen?

Bin dankbar für jede Erleuchtung diesbzgl. :-)

von Joerg W. (joergwolfram)


Lesenswert?

Das ist das RAMPZ Register für ELPM/SPM, steht leider im Datenblatt für 
Mega164...Mega1284 nicht drin, sondern nur in dem für den Mega1284 
allein.

Gruß Jörg

von Volkmar D. (volkmar)


Lesenswert?

Nur in der Register Summary fehlt es, auf Seite 15 ist das Register 
beschrieben.

Gruß
Volkmar

von Hanno (Gast)


Lesenswert?

Ahh, jetzt, ja! :) - Das macht natürlich Sinn.

Danke für den Hinweis!

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.