PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit "Operand out of range"



Ozzy
04.07.2006, 08:05
Hi,

ich bin gerade dabei, ein Programm für einen ATMega128 mit AVRStudio 4 zu schreiben.
Nun möchte ich eigentlich alle Ports benutzen, und da triff auch mein Problem auf: er sagt mir bei 4 Zeilen:
error: Operand 1 out of range: 0x61 (bzw. 2,3,4 mit 0x62,0x63,0x64)

. Hier der Code:

ldi R16, 0x00 ; PORTF (Ausgabe)
out DDRF, R16 <---------
ldi R16, 0xFF
out PORTF, R16 <---------

ldi R16, 0xFF ; PORTG (Ausgabe)
out DDRG, R16 <---------
ldi R16, 0x00
out PORTG, R16 <---------

Ich verstehe nur nicht, woran das liegt; das cseg für diesen Bereich fängt bei 0x0030 an, das dseg bei 0x100.

Könnt Ihr mir vielleicht sagen, wo der Fehler liegt???

MfG, Ozzy

PicNick
04.07.2006, 10:55
Oberhalb vom SREG (0x3F bzw. 0x5F) gehen die IO-Reg befehle wohl nicht, die mußt du "normal" anquatschen, denk' ich.
also z.B.

ldi R16, 0x00
STS DDRF, R16

Mußt aber in der Include schauen, wie DDRF definiert ist.

Ozzy
04.07.2006, 15:12
Hm, aber bei den anderen Ports gehts doch...
Es geht auch, wenn ich statt DDRF DDRB schreibe. Also vielleicht ein Problem mit den Ports an sich???

PicNick
04.07.2006, 15:20
Schau: Der AVR hat ein paar Maschinenbefehle, die direkt auf IO-Register zugreifen. Die Nummer/Adresse dieses IO-Registers ist in den Befehl eincodiert.
https://www.roboternetz.de/wissen/index.php/Atmel_Controller_Mega16_und_Mega32#Aufbau
Und es ist eben so, daß für das IOREG im Befehl nur 6 Bit da sind, es geht also nur von 0-3F
In dem Bereich ist das DDRB drinnen, NICHT aber DDRF
(Gucken Datenblatt-Register summary)

Also mußt du Befehle nehmen, die den gesamten Adressraum abdecken können. z.B. LDS und STS

Ozzy
04.07.2006, 15:24
Ok, danke, jetzt habe ich es verstanden! Hatte bisher nur ATMega16, da ging das noch alles so schön; daran hatte ich natürlich nicht gedacht...

PicNick
04.07.2006, 15:26
Hatte bisher nur ATMega16, da ging das noch alles so schön.

Jaja, das war mal. Jetzt hast du ja einen richtigen Dampfer :mrgreen:

Florian
04.07.2006, 16:49
richtigen DampferIch hoffe für Ozzy, dass es kein Dampfer ist! ;o)=
Tja, deshalb bleibe ich gerne bei den kleineren Rennbooten, der Zugriff geht schneller ... *einbildung* ... aber nur unwesentlich!

Viele Grüße,
Florian

Ozzy
04.07.2006, 20:02
Ich würde auch lieber bei den Alten bleiben... Vor allem, da man ja nicht so einfach ein Proggi für den 16er auf dem 128 laufen lassen kann.
Wenn ich doch nur diese blöden Fehler finden würde...