Autor Tema: valores "Memory Address" en .hex  (Leído 1687 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
valores "Memory Address" en .hex
« en: 01 de Abril de 2020, 14:16:13 »
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:

Código: [Seleccionar]
/* -------------------------------------------------------------------------------------- */
/* 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


Desconectado tito melli

  • PIC12
  • **
  • Mensajes: 84
Re:valores "Memory Address" en .hex
« Respuesta #1 en: 06 de Abril de 2020, 05:26:53 »
Resuelto: parece ser que los PIC16F usan "word address" y siempre hay que dividir la dirección de memoria entre 2.

Saludos!


 

anything