Estoy tratando de cargar un archivo hexadecimal, generado a partir de múltiples archivos fuente C con xc8
en Proteus, en un PIC18F4520. Por lo general, no tengo ningún problema al hacer esto, pero ayer porté un código de pantalla Arduino TFT al PIC e intenté cargar y probar algunas funciones básicas de la pantalla. Se cargó el HEX y el PIC condujo la pantalla perfectamente, excepto por un problema con el color del texto. Revisé el código y descubrí que el problema se debía a una variable que declaré accidentalmente como uint8_t
en lugar de uint16_t
, lo que provocó que el color se truncara. La variable es una de un grupo de variables static
con alcance de archivo:
static uint8_t _width = ST7735_TFTWIDTH;
static uint8_t _height = ST7735_TFTHEIGHT;
static uint8_t rotation = 1;
static uint8_t cursor_y = 0;
static uint8_t cursor_x = 0;
static uint8_t textsize = 1;
static uint8_t textcolor = 0xFFFF; // this is the relevant line
static uint8_t text_wrap = 1;
static uint8_t colstart = 0, rowstart = 0;
Corrigí la declaración y construí un nuevo HEX en Proteus e intenté volver a cargarlo con la aplicación PICkit 2. Cuando importé el archivo hexadecimal para comenzar la carga, recibí la advertencia: Hex file loaded is larger than device
, lo cual no tenía ningún sentido ya que el resumen de la memoria es:
Memory Summary:
Program space used 17DBh ( 6107) of 8000h bytes ( 18.6%)
Data space used 6Dh ( 109) of 600h bytes ( 7.1%)
Configuration bits used 7h ( 7) of 7h words (100.0%)
EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
ID Location space used 8h ( 8) of 8h bytes (100.0%)
Data stack space used 0h ( 0) of 580h bytes ( 0.0%)
Esta vez, al inspeccionar la salida xc8
en MPLABX, encontré este mensaje en la parte inferior: Warning: C:/.../train85.X.production.hex contains code that is located at addresses that do not exist on the PIC18F4520
. Esto se correlaciona con otras respuestas que encontré en línea; Parece que el código se está escribiendo en direcciones no existentes. Los métodos utilizados por otros para resolverlo parecen variados: algunos hicieron cambios en la disposición de las variables CONFIG, haciéndolos más compactos (que he intentado), mientras que otros editaron el HEX en sí manualmente. Algunas observaciones que pueden ser pertinentes:
- Si deshago esa única corrección en la declaración anterior, la advertencia ya no está presente.
- Hay 2 matrices grandes para detalles de fuentes, que se almacenan en la memoria del programa con la palabra clave
const
. Tienen un tamaño aproximado de 2.4k y se accede a ellos mediante punteros en estructuras. - Si muevo una de las matrices de fuentes a la memoria de datos eliminando el calificador
const
, la advertencia también desaparece. - Cuando ignoré la advertencia y subí el HEX al PIC con la aplicación PICkit, no parecía haber ningún problema; la pantalla TFT se manejó perfectamente y se resolvió el problema del color del texto.
Los archivos HEX, SYM, MAP y inicio ASM, antes y después de la corrección, se encuentran aquí en caso de que los necesites. No puedo publicar mi código aquí ya que hay varios archivos, pero puedo proporcionarle un enlace, si es necesario.
En caso de que mi pregunta no fuera clara, necesito saber la causa exacta de la advertencia, ya que se relaciona con mi código (HEX) y con una solución . ¿Es seguro ignorarlo, como hice yo? Gracias de antemano.