unexpected REGDEF - z-pointer einrichten - icall / ijmp

OP #327657
Lesenswert?

Hallo zusammen!

Ich will gerade den Befehl icall nutzen um ein menü einzurichten.
Habe allerdings anscheinend ein Problem mit zl und zh.
AVRStudio gibt mir immer den Fehler "syntax error, unexpected REGDEF"
aus.

Könnte da mal jemand einen Blick darauf werfen, wo ich da etwas falsch
mache?

Hier der komplette code:
---------------------------CODE ANFANG-------------------------------
.include "m162def.inc"
.def dashier = r16
ldi dashier, 0x02

          ;----in der nächsten Zeile wird der Fehler angezeigt----
   ldi zl,low (dashier*2) ;hier z.B. 0x02 statt "dashier*2 oder
   ldi zh,high(dashier*2) ;"dashier", dann gehts ohne Fehler.
                          ;Allerdings kann ich damit nicht anfangen

   icall        ;auch mit ijmp ändert sich nichts
   ret
punkt1:
   nop
   ret
punkt2:
   nop
   ret
punkt3:
   nop
ret

dashier:
   rjmp punkt1
   rjmp punkt2
   rjmp punkt3

ende: rjmp ende
---------------------------CODE ENDE--------------------------------


MFG
Samtox
#327658
Lesenswert?

Du musst den Z-Pointer mit einer Konstante laden, nicht mit einer
Variable. Die Konstante ist das Label, an dem deine Sprungtabelle
beginnt. Und das *2 ist wohl auch nur bei LPM nötig, da hier der
wordweise organisierte Flash byteweise angesprochen werden muss. Bei
IJMP/ICALL wird der Flash wordweise angesprochen.

Siehe: http://www.hanneslux.de/avr/stopuhr/index.html
oder http://www.hanneslux.de/avr/zuenduhr/index.html

Die Steuerung des Menüs müsste in beiden Codes zu finden sein.

...

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