Forum: Mikrocontroller und Digitale Elektronik Relative Branch out of Reach


von Thomas H. (Gast)


Lesenswert?

Hallo,

ich habe wie viele andere auch folgende Schleife programmiert. Beim 
Assemblieren meldet er aber den Fehler (AVR-Studio) "Relativa Branch out 
of Reach". Die dt. Uebersetzung ist kein Problem, aber welches Problem 
besteht. Die Schleife muesste doch einwandfrei sein - oder?

ldi  cou0, 0x06

loop_data_out:

     rcall  out_ready
     ld  all0, X+

     ..... etc.....

     dec  cou0
brne  loop_data_out

Tschues,

Thomas H.

von A. Füßer (Gast)


Lesenswert?

Hallo Thomas,

Die ganzen Branch-Befehle können nur max. -64/+63 Byte im Programmcode 
springen. (Der Opcode ist für größere Sprünge zu klein/kurz und nicht 
dafür gemacht).
"Workaround": Springe zunächst mit brne eine nähere Speicherstelle an 
und von dort aus per rjmp (das kann bis zu +-2k springen) ans 
eigentliche Ziel.

Tschüß,
 André.

--
http://www.canathome.de - Hausautomation mit AVR + CAN

von Thomas H. (Gast)


Lesenswert?

Hallo André,

danke, ich werde es einmal anders versuchen.

Ade,

Thomas H.

von gast (Gast)


Lesenswert?

hi,

hatte das problem auch und hab es damit sofort gelöst. echt super. danke

mfg

von Michael U. (amiga)


Lesenswert?

Hallo,

A. Füßer schrieb:
> "Workaround": Springe zunächst mit brne eine nähere Speicherstelle an
> und von dort aus per rjmp (das kann bis zu +-2k springen) ans
> eigentliche Ziel.

oft hilft auch ein Umdrehen der Bedingung:


     dec  cou0
     breq  bin_fertig

     rjmp loop_data_out

bin_fertig:

Gruß aus Berlin
Michael

von Walker M. (Gast)


Lesenswert?

Hallo

einfach genial hat sofort funktioniert! danke vielmals!

mfg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.