Hola,
Estoy creando un bootloader-usb (aplicación + firmware) personalizado. Lo principal que interesa es que pueda programar (escribir un .hex al PIC), que ya la tengo mas o menos... Solo funciona si el PIC está inicialmente vacio y si no, el programa a escribir tiene que ocupar igual o más que el programa que haya actualmente en el PIC. Es decir, al escribir solo se sobreescribe el espacio de memoria que ocuparia el programa, y el resto de la memoria no se toca, lo cual, como os imagináis, pues no es bueno.
Asi que la idea es que borre casi por completo la Program Memory (dejando solo el bootloader) y después ya escribir.
He probado de hacer:
for(i=APPLICATION_START; i<PROGRAM_MEMORY*2; i += FLASH_ERASE_SIZE)
erase_program_eeprom(i);
Donde APPLICATION_START es el tamaño del bootloader, PROGRAM_MEMORY es getenv("PROGRAM_MEMORY") y multiplico por 2 que son los bytes por palabra (instrucción).
Al ejecutar eso en el PIC después no funciona nada, ni si quiera el bootloader, lo cuál no entiendo, pues no he tocado su espacio de memoria
Compilador CCS
PIC18F4550
Saludos
PD: Me estoy sirviendo del ex_usb_bootloader.c de CCS.
PD2: Soy informático, y lo mio es programar a alto nivel, a nivel bajo me pierdo en seguida.