Hallo Gruppe,
und gerade ist mir beim Herumspielen noch etwas aufgefallen: Wenn ich aus einer C-Datei, die ich mit avr-gcc übersetze auf einem AVR einen absoluten Jump einfügen will, ohne das jmp-Kommando zu verwenden (das unterstützen einige Einheiten ja nicht), muss ich auf rjmp ausweichen. Damit das automatisch die aktuelle Adresse verwendet:
__asm__ __volatile__("JumpLbl: rjmp .+0x100 - JumpLbl");
führt im Code dazu:
274: 73 cf rjmp .-282 ; 0x15cd.h. immer 0x5c Bytes zu weit. Wenn ich diese 0x5c immer abziehe
__asm__ __volatile__("JumpLbl: rjmp .+0x100 - JumpLbl - 0x5c");
dann klappt es - aber eine "saubere" Lösung ist das nicht. Insbesondere denke ich mal, dass diese 0x5c davon abhängen für welches Device ich übersetze (Anzahl der Interruptvektoren u.ä.). Ich nehme an, dass diese Differenz damit zusammenhängt, dass das "JumpLbl" Label aufgelöst wird, bevor der Code reloziert ist (also vor dem Linkerskript). Wie bekomme ich das Deviceunanhängig hin?
Viele Grüße, Johannes