ich hab ein Problem mit lo8() und hi8() von WinAVR, dazu ein Beispiel
mit dem Z-Pointer:
1 | ldi ZL, [adresse von sprung, manuell eingegeben]
|
2 | ldi ZH, [adresse von sprung, manuell eingegeben]
|
3 | ijmp
|
4 |
|
5 | sprung:
|
springt wie es soll zu sprung.
aber
1 | ldi ZL, lo8(sprung)
|
2 | ldi ZH, hi8(sprung)
|
3 | ijmp
|
4 |
|
5 | sprung:
|
springt genau doppelt soweit.
Wenn ich den Code disassemblier steht beim zweiten Beispiel einfach die
doppelt so große Adresse drin.
Im Moment halbier ich den Z-Pointer hinterher einfach, dann springt er
genau an die richtige Stelle, aber trotzdem würde mich interessieren
warum der nicht die richtige Adresse nimmt.