- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: Probleme mit "Operand out of range"

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.03.2005
    Ort
    Lübeck
    Beiträge
    315

    Probleme mit "Operand out of range"

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.03.2005
    Ort
    Lübeck
    Beiträge
    315
    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???

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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/in..._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
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.03.2005
    Ort
    Lübeck
    Beiträge
    315
    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...

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von Ozzy
    Hatte bisher nur ATMega16, da ging das noch alles so schön.
    Jaja, das war mal. Jetzt hast du ja einen richtigen Dampfer
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    35
    Beiträge
    2.624
    richtigen Dampfer
    Ich 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

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.03.2005
    Ort
    Lübeck
    Beiträge
    315
    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...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus