Gast
#364418
Kann mir bitte jemand erklären, warum das unten stehende Programm nicht funktioniert? Das Programm ist für einen M8 und ich benutze die neuste Version von WinAVR. Ich will mir einen Boot Loader für den M8 schreiben und habe dazu dieses kleine Testprogramm verfasst. Das Programm wird an die Adresse 0x0c00 gelinkt und funktioniert auch soweit (Toggle Bit am Programmende für einen Frequenzmesser und .lss-Datei überprüft). Wenn ich das Flash mit PonyProg auslese nachdem das Programm gestartet wurde, stehen an Adresse 0x0100 nur FF's. Ich habe mal manuell einige Werte ab Adresse 0x0100 eingegeben, mit PonyProg ins Flash zurückgeschrieben, dass Programm gestartet und danach das Flash wieder ausgelesen. Es standen immer noch die Werte ab der Adresse 0x0100 die ich zuvor dort manuell eingegeben habe. D.h. die Löschfunktion boot_page_erase( address ); wird schon nicht ausgeführt! Gruß Jürgen #include <avr/io.h> #include <avr/boot.h> #include <avr/pgmspace.h> #include <avr/interrupt.h> unsigned char buffer[64]; int main(void) { unsigned char c, *p; unsigned int i; unsigned long address = 0x100L; p = buffer; for(c=0;c<64;c++) *p++ = c; cli(); eeprom_busy_wait(); boot_page_erase( address ); boot_spm_busy_wait(); for( c=0, p=buffer; c<SPM_PAGESIZE; c+=2 ) { i = (unsigned int)*p++; i += (unsigned int)(*p++ << 8); boot_page_fill( address+c, i ); } boot_page_write( address ); boot_spm_busy_wait(); DDRB |= PB2; for(;;) { PORTB |= PB2; PORTB &= (~(PB2)); } return(0); }