error de enlace de MPLAB

2

Estoy trabajando con Invensense IMU3000 y un microcontrolador PIC18. Estoy migrando una biblioteca, escrita en MSVS2005, a MPLAB, haciendo las modificaciones adecuadas para ejecutarlo. El código en sí solo proporciona advertencias, pero cuando se trata de vincular, obtengo esto:

Error: la sección '.idata_dmpDefault.o' no puede ajustarse a la sección. Sección '.idata_dmpDefault.o' longitud = 0x000004b0

¿Qué significa?

    
pregunta stef

4 respuestas

4

Todas las variables en el programa toman espacio, y estás usando demasiado para el chip para el que intentas compilarlo. El programa que intentas compilar necesita 0x4B0 bytes (1200 en decimal), y tienes algo menos que esto.

Averigua cuánto espacio RAM tiene tu PIC18. Asegúrate de que coincida con lo que estás compilando. Es posible que haya un archivo de definición de vinculador en algún lugar que defina los tamaños de las distintas secciones. La sección IDATA es tu problema actual.

Es posible que alguien más familiarizado con MPLAB pueda completar los detalles sobre cuáles son sus restricciones reales y cómo configurar correctamente el compilador para su chip.

    
respondido por el darron
1

Leer FAQ-8 y FAQ-10 En Guía de inicio del compilador Microchip C18 debería Ayudarte a resolver los problemas. No estoy seguro de si está utilizando C18 o no para compilar su código, pero incluso si no lo está, es probable que deba modificar su secuencia de comandos de vinculador para aumentar el tamaño del banco de RAM.

    
respondido por el mjh2007
0

Ustedes son

(A) se está quedando sin memoria flash para almacenar los valores iniciales de las variables, o
(B) tus variables son más grandes que el segmento.

El vinculador está intentando vincular el archivo dmpDefault pero desborda los segmentos de memoria definidos del vinculador.

O

Con MCC18, cada archivo crea 1 sección de datos con un máximo de 256 bytes (1 banco). .idata_dmpDefault es mucho más grande que eso. Puede crear secciones de datos con nombre combinando bancos en el vinculador y colocar #pragmas alrededor de las variables para ubicar esas variables en esa sección.

    
respondido por el Robert
0

¡Gracias a todos por su amable ayuda!

Tal vez una parte de la solución puede ser de ayuda general: Descubrí que tenía grandes arreglos constantes (no había escrito el código yo mismo) y reduje drásticamente la necesidad de RAM al colocarlos en Flash en lugar de RAM mediante el uso de la palabra clave "rom" en su declaración.

    
respondido por el stef

Lea otras preguntas en las etiquetas