Was _genau_ macht wrap relative jump?

Gast #106830
Lesenswert?
• ▲
▼
Hi leute,

mein programm ist nun größer als 8kByte (AtMega16) und mein AVR-Studio
meckert -zu Recht- dasss meine RJMP's in der Interrupttabelle ihr
"Ziel" nicht mehr erreichen, was beim UART-RX int. auch stimmt.
immer, wenn ein Zeichen auf der Schnittstelle eingeht, springt der AVR
an $0000. Ich habe die Warnhinweise vom AVR-Studio (4.09.338) gelesen
und die Option "Wrap relative Jump" ausgeschaltet und in der
Interrupttabelle aus dem "rjmp" ein "jmp" gemacht. Was passieert
aber nun mit den anderen, in meinem Projekt vorhandenen,
Rjmp-Befehlen?!?
Springt er jetzt nur noch -sagen wir- vorwärts? Verhalten sich die
RJMP's jetzt wie JMP's?
Wenn der rjmp +-2K springen kann, kann er bei abgeschalteter
Wrap-Option nur noch in eine Richtung, dafür aber 4K weit springen?
Vielleicht lasse ich die Option gesetzt und ändere nur den einen
relativen Sprung, der definitv nicht reicht, in einen JMP. Das andere
lasse ich so, wie es jetzt ist, oder?

Der Alttag hat mich wieder...
AxelR.
Gruß an MarioS.
Gast #106831
Lesenswert?
• ▲
▼
rjmp:
Relative jump to an address within PC - 2K +1 and PC + 2K (words). In
the assembler, labels are used instead of relative
operands. For AVR microcontrollers with Program memory not exceeding 4K
words (8K bytes) this instruction can address
the entire memory from every address location.

jmp:
Jump to an address within the entire 4M (words) Program memory. See
also RJMP.
Gast #106832
Lesenswert?
• ▲
▼
wenn du am ende des speicher bist und dann einen rjmp in positiver
richtung unternimmst läuft der zähler über und beginnt bei 0. also beim
anfang deines speicherbereiches.

das ist wohl mit wrap gemeint. richtig?
Gast #106834
Lesenswert?
• ▲
▼
sozusagen ein a20 gate für avr's :)

das +/-2kwords ist ein fester befehl, das lässt sich nicht im avr
studio umschalten.

einfach jmp konsequent nehmen, dann gibts auch keinen ärger bei
programmumstrukturierungen wenn der rjmp plötzlich doch nicht mehr
reicht
Gast #106838
Lesenswert?
• ▲
▼
Danke, Leute.
es geht mir ja garnicht darum, den Unterschied zwischen RJMP und JMP
erklärt zu bekommen, sondern die Konsequenzen, die sich aus dem Haken
"Wrap relative Jump" für mich und mein Programm ergeben. das Rjmp
+-2K springt und Jmp den gesamten Speicher erreicht, steht im
Datenblatt. Ist ja soweit klar.
Wird vielleicht das höherwertigste Bit für die Sprungweite als
Signed(mit aktivierter Option)/unsigned (ohne Häckchen) behandelt?
Gruß
Axel
Gast #106839
Lesenswert?
• ▲
▼
bei rjmp wird die relative sprungweite immer per signed angegeben.

So, und jetz der Mördersatz: :)

Der Vorteil, der sich bei aktivierten "wrap relative jump" ergibt
ist, das du beim ausführen eines rjmp Befehls am Rande der oberen oder
unteren Speicherbereiche nicht an diese Speichergrenzen stößt, sondern
der Wirkungsbereich eben darüber hinaus geht und an der jeweils anderen
Speichergrenze fortgesetzt wird.

alles klar? Vorteil ist also: du kannst da, wo normalerweise ein jmp
nötig gewesen währe Takt und Speicherplatz sparen, weil manchmal (siehe
oben) nun ein rjmp reicht.

ich hoffe das hilft und ich hab´s nicht zu kompliziert ausgedrückt.
Gast #106842
Lesenswert?
• ▲
▼
ist ja auch linear adressiert, nur mit dem unterschied, daß ich bei
allen AVRs mit <= 8 kByte flash den kompletten programmspeicher mit
rjmp/rcall befehlen abdecken kann. Diesen Umstand teile ich dem
Assembler mit dieser Option mit. Ab Version 2.x des Assemblers wird
diese Option anhand der Flash-Grösse automatisch aktiviert/deaktiviert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.