Ich habe folgendes Problem: Ich will von meinem Bootloader in das Hauptprogramm springen dabei verwende ich asm volatile("rjmp 0"). Aber er macht nicht im Hauptprogramm weiter... ATMEGA8 Hauptprogramm bei adresse 0x000 WinAVR Kann mir jemand bitte weiterhelfen.... Danke
Mix aus C und Assembler: MCUCR = 1; //move vectors to 0x0000 MCUCR = 0; #asm ("jmp 0x0000")
Hab es eben erst gesehen, du darfst natürlich auch nicht rjmp nehmen.
Hallo danke für di antwort. jmp wird nicht akzeptiert. ("jmp 0")
Hi wie compilierst du deinen Bootloader? Wenn du die .text Sektion per --section-start=.text=... verschiebst wird das mit dem rjmp nichts werden da der Linker auch die Adresse verschiebt. Ich löse das per Linkersymbol. Der Linker bekommt an der Kommandozeilen --defsym=app_start=0 und dann asm volatile("rjmp app_start"); an der Stelle wo du ins Hauptprogramm springen willst. Kompletten Bootloader samt passendem makefile findest du in meinem USBisp-Projekt. -> www.matwei.de Matthias
In Assembler kann man das gut mit rjmp (FLASHEND+1) machen, der rjmp landet dann immer bei Adresse 0. Funktioniert bei allen AVRs (sollte). Gruss Frank
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.