Hi,
ich hhabeein Problem in einem Projekt mit einem MEGA32 und AVRStudio
4.18, das mich etwas stutzig erscheinen lässt. Ich fahre per IJMP
indiziert eine Tabelle mit 255 Einträgen an, was seither klaglos
funktioniert hat, ach der Standardmethode
1 | ldi zl,low(sprungtabelle)
|
2 | ldi zh,high(sprungtabelle)
|
3 | add zl,index
|
4 | ldi temp,0
|
5 | adc zh,temp
|
6 | ijmp
|
Der Code ist dann inzwischen reichlich angewachsen (>14k); indem ich
etliche rcall-Sprünge innerhalb der aschlußendlich ngesprungenen
Subroutinen durch Makros ersetzt habe.
Nun konnten die Einträge in der Sprungtabelle per rjmp irgendwann nicht
mehr erreicht werden; somit wollte ich stattdesen "jmp" in der
Sprungtabelle verwenden. Seither wird grundsätzlich der falsche
Tabelleneintrag angesprungen, quasi um Dezimal 81 nach hinten
verschoben. Vor Erweiterung des Codes habe ich alle 255 Tabelleneinträge
einwandfrei anfahren können.
Kann das dadurch bedingt sein, das der Compiler die Makros nicht richtig
berücksichtigt? Oder liegt es an den JMPs? Auch die andere Lösung des
Anfahrens der Sprungtabelle per lpm un einer Sprungtabelle mit
".dw"-Einträgen arbeitet nicht korrekt; auch die Position der
Sprungtabelle im Code ist irrelevant
Viele Grüsse
Stefan