AVR Statusregister sichern

Gast #862039
Lesenswert?
• ▲
▼
Hallo Leute,

habe das Problem, dass mein AVR-Studio den Bezeichner SREG nicht 
erkennt.
Allerdings ist der Bezeichner in der m8def.inc definiert.
Schreibe ich .equ sreg = $3f in mein Programm, beschwert sich der 
Assembler, dass der Bezeichner unzulässig geändert wurde.

Kann mir jemand sagen, was verkehrt läuft?
Gruß, Jürgen
#862047
Lesenswert?
• ▲
▼
>>Schreibe ich .equ sreg = $3f in mein Programm,

Was soll jetz dieser totale Quatsch?
SRAEG ist ist dem passenden inc. File ordnungsgemäß definiert,
WAS ZUM GEIER hast Du da umzudefinieren?????

Lass einfach die Finger von der VÖLLIG unnötigen und VÖLLIG sinnfreien 
Neu-Deklaration per EQU. und alles ist gut.

Jochen Müller
Gast #862048
Lesenswert?
• ▲
▼
NAchtrag: bzw du kannst auch die Bits einzeln setzen mit z.B. SEC, CLC 
,......
Schau einfach mal ins Datenblatt!!!

Wenn du das Register sichern willst dann push es auf den Stack und nach 
der Behandlung deiner Routine pop es wieder.

GRUSS
#862059
Lesenswert?
• ▲
▼
>>Wenn du das Register sichern willst dann push es auf den Stack und nach
>>der Behandlung deiner Routine pop es wieder.

AUCH DAS ist völliger Unsinn!
Du kannst ein IO-Register NICHT auf den Stack pushen!

Du kannst das IO-Register per IN-Fefehl in ein Datenregister kopieren, 
und dieses Datenregister dann auf den Stack legen.

Das ist GANZ ETWAS anderes!
Und genau weil der OP diesen Unterschie nicht verstanden hat, bekam der 
das Problem. Da helfen unscharfe und zudem noch fehlerhafte Antworten 
absolut nicht weiter!

Jochen Müller
Gast #862065
Lesenswert?
• ▲
▼
Hi!

Für zukünftige Fälle:
Das komplette Instructionset:
http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf
Dann siehst du, welcher Befehl wofür geeignet ist.

Außerdem solltest du wissen, dass die AVRs verschiedene Adressräume 
benutzen.
Normalerweise (bitte nicht schlagen, falls nicht ganz richtig) fängt der 
Adressraum bei den GPRs, dann kommen die I/O-Regs und dann der SRAM. Der 
Stack kommt die von oben im SRAM entgegen, wenn du anfangs den 
Stackpointer richtig gesetzt hast.
EEPROM und Flash haben eigene Adressräume, die unabhängig sind.

Viel Spaß beim programmieren.
Gast #862074
Lesenswert?
• ▲
▼
Hi

@ wjunky: AVRs haben eigentlich nur 3 Adressräume: SRAM, EEPROM und 
FLASH. Register, IO, SRAM teilen sich eigentlich den gleichen 
Adressraum. Mit

ldi ZL,0
ldi ZH,0
ld r16,Z

bekommst du r16=r0. Genauso kannst du die IO-Register auslesen. Der 
Stack wird an die obere SRAM-Grenze gelegt um einen maximalen Abstand zu 
anderen RAM-Variablen zu erreichnen. Bei bekannten Stack-Bedarf könnte 
er auch an 'fast' jeder anderen Stelle in Ram liegen.

MfG Spess
Gast #862818
Lesenswert?
• ▲
▼
Äh!
genau das habe ich zu sagen versucht...
wo ich jetzt nochmal drüberlese, muss ich aber zugeben, dass es 
reichlich missverständlich formuliert ist.

Danke für die Klarstellung, wollen ja nicht, dass Jürgen aus GPR, IO und 
SRAM drei Adressräume macht :-o

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren