Hola!
Estoy intentando usar un bootloader USB-CDC en un PIC16F1459, pero estoy teniendo problemas con las direcciones de memoria que aparecen en el archivo ".hex".
Quiero usar 2 de las 4 paginas de memoria que tiene para el bootloader y los drivers del USB. Para ello he usado el siguiente encabezado en mi codigo:
/* -------------------------------------------------------------------------------------- */
/* map reset vector and interrupt vector */
/* 0x000-0xFFF is used by the bootloader. The bootloader maps the original */
/* reset vector (0x000) to 0x1000 and the interrupt vector (0x004) to 0x1004. */
/* -------------------------------------------------------------------------------------- */
#build (reset=0x1000, interrupt=0x1004)
/* -------------------------------------------------------------------------------------- */
/* reserve boot block area */
/* This memory range is used by the bootloader, so the application must not */
/* use this area. */
/* -------------------------------------------------------------------------------------- */
#org 0, 0xFFF {}
Sin embargo en el .hex me saca las direcciones usando la siguiente "formula":
Memory_Address = (ORG_Second_lim+1)*2 -----> Memory Address = (0xFFF + 1) * 2 = 0x2000
Es decir:
:0620000090311A280000D7
:08200800203085000230840045
:102010000008031919280530F800F701F70B0E28FE
........ etc
Si por ejemplo pongo #org 0, 0xAA {} -----> Memory Address = 0x156
Alguien me podría decir por qué sucede esto?
Es esto algo que debería tener en cuenta el compilador al hacer el Bluid, algo a tener en cuenta cuando le envío la información desde el PC al PIC, o algo que el bootloader debería tener en cuenta y procesar en concordancia?
Estoy teniendo problemas con el flasheo del PIC, pues no lo direcciona donde debe, además de pasar de nuevo a la página 0 cuando la dirección es > 0x1FFF ("Rollover to Page 0")
Muchas gracias de antemano!
Saludos