Gast
#1926404
Hi Leute, ich versuche gerade ein kleines Programm funktiontauglich in den Bootloaderbereich zu bekommen. Es scheint aber dass ich irgendwie auf dem Schlauch stehe. Ich benutze einen Atmega16 inc. AVR Studio Folgendes Programm funktioniert ab Adresse 0x0000 so wie es soll. PortA wechselt nach jedem empfangenen Byte über die UART seinen Zustand. ------------------------------------------------------------------------ - #include <avr/io.h> #include <avr/portpins.h> #include <avr/interrupt.h> volatile int debug = 0; int main(void) { DDRA = 0xFF; SREG |= (1<<7); UCSRB |= (1<<TXEN) | (1<<RXEN); UCSRB |= (1<<RXCIE); UBRRL= 26; //Baud = 19200 while(1) { if (debug%2) PORTA = 0x00; else PORTA = 0xFF; } return 0; } //**************************************** ISR ( USART_RXC_vect ) { while (!(UCSRA & (1<<RXC))); unsigned char dummy = UDR; debug++; } ------------------------------------------------------------------------ - Ok, nun will ich das Programm samt Vektortabelle verschieben. Dafür habe ich das Linker Script um die Option -Ttext=0x3800 erweitert. Wenn ich das Hex File auslese, steht der Code auch an der richtigen Stelle im Flash und nicht mehr an Adresse 0x0000. Um die Vektoren mit zu verschieben habe ich den Code um die Zeilen GICR = (1<<IVCE); GICR = (1<<IVSEL); direkt unter "int main(void) {" erweitert In den Fuses Häckchen bei BOOTRST BootSZ = Boot Flash Size=1024 words start address=$1C00 Hoffe jemand kann mir einen Hinweis geben. MFG Mike