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
>>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
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
joa, das mit dem mov habe ich aus dem avr-Tutorial, dort ist auf ein PDF
verlinkt -> 'Der STACK Teil', scheint wohl für einen anderen Controller
zu sein
>>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
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.
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
Ä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