Gast
#3866288
Hallo, Ich benutze eine Atmega1284p, der in C mit avr-gcc 4.7.2 programmiert wird. Geflasht wird mit avrdude. Für einen Bootloader Test verschiebe ich die Textsektion in den Bootloader-Bereich. Genauer gesagt, an Byteadresse 0x1E000. (linkeraufruf: -Ttext,0x1E000) Die Größe meines Bootloaderbereichs habe ich per Fuse auf 4k Words gestellt, das entspricht der Start-Word-Adresse 0xF000. Der linker will ja soweit ich weiß die Byteadresse, richtig? Hier sehe ich also kein Problem. Den Reset-Vektor verbiege ich per BOOTRST. Das klappt soweit, wie ich durch einen Test herausgefunden habe. Ich verschiebe die Vektortabelle mittels MCUCR. Das Prozedere klappt auch, denn wenn ich mir anschließend MCUCR an meinen Leds ausgeben lasse erhalte ich das Bitmuster 0x02. Trotzdem krieg ich keine Interrupts zum Laufen. Programme ohne ISRs, wie Led-Blinken mittels delay, klappen wunderbar. UART mittels ISR klappt nicht, der Interrupt kommt nicht. Der allergleiche Programmcode funktioniert 100% wenn ich .text nicht verschiebe. Gibt es also noch was zu beachten? Liegt es daran dass der Controller 128k Speicher hat? Muss dabei irgendwas bzgl. Sprungbefehle beachtet werden?