Warum kommt bei mir bei diesem befehl:
cpi R16, 0x0A
breq T10
Fehlermeldung:
"Relative branch out of Reach"
MFG
Michi
Warum kommt bei mir bei diesem befehl:
cpi R16, 0x0A
breq T10
Fehlermeldung:
"Relative branch out of Reach"
MFG
Michi
Er sagt's ja eh. Das Sprungziel darf nur +/- 63 Worte weit weg sein.
Tip: Wenn du Assembler programmierst, druck' dir das AVR Instruction-Set aus, binde es in Schweinsleder mit Goldlettern und mach es zu deiner Bibel. Und immer dreimal nachschauen, bevor du einen Befehl wo hinschreibst. Du kommst sonst nicht weiter.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
danke *gg* ok werd ich machen!! so und wie kann ich dass jetzt am besten anstellen?
anderen integer wert?
ahja ich programmiere in assembler und nicht in C!
MFG
Michael
Du drehst die Bedingung um und machst einen kurzen (relativen) Spring über einen langen (absoluten) Sprung. Letzterer kann überall landen.
Disclaimer: none. Sue me.
neinein, der CPI ist schon ok. es geht um den "breq"
Einmal um die Ecke:
Code:CPI r16, 0x0A BRNE UnGleich jmp T10 UnGleich: ....
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hab es schon hab es einfach ins -63 gesetzt!
MFG
Michael
@PicNick: Kann man den breq nicht stehen lassen und im Assembler branch relaxing aktivieren? branch relaxing ist ja eine Aufgabe eines Assemblers (neben Assemblieren, Symbolverwaltung, etc).
Disclaimer: none. Sue me.
Glaub ich nicht. Wenn ich im Assembler "BREQ", also eindeutig eine AVR-Instruction hinschreibe, und er fängt dann an, schöpferisch zu werden, wurde ich ihm sofort das Genick brechen.
Wenn einer meint, kann er ja einen Macro schreiben, der je nach distanz verschiedenen Code generiert.
Für sowas ist ja u.A "C" gemacht, dann geht mich das nix mehr an. (mal abgesehen davon, daß eine "goto" ein Pfui-Gack ist)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Nö, das ist eher üblich, daß Assembler sowas tun und (etwas) anderen MaschinenCode erzeugen, als sie bekommen. Ein Hauptgrund dafür kann sein, dein der Compiler nicht weiss oder garnicht wissen kann wie weit zu springen ist. Das tritt typischerweise dann auf, wenn sich Instruktionslängen erst zur Linkzeit ergeben -- in dem Falls würde sogar erst der Linker relaxen. Weiteres Beispiel kann der Workaround von Silicon-Bugs, die teilweise nur von Assembler oder (dynamschem) Linker gefixt werden können. So, genug OTZitat von PicNick
Disclaimer: none. Sue me.
Lesezeichen