Error de vinculación de MPLAB

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

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

¿Qué significa?

Todavía no puedo dar una respuesta realmente sólida, pero hay una sección definida en su código en la que entran datos/variables/código (probablemente variables) que no está definida como una sección lo suficientemente grande en el enlazador.
¿Qué PIC18 estás usando? ¿Tiene suficiente RAM para su aplicación? ¿Qué compilador/ensamblador estás usando para tu código?
@Stefano: ¿Qué hace tu biblioteca VS? El chip que mencionas solo se comunica con I2C , y la única forma en que puedo imaginar que VS tenga acceso directo a él (o uno similar) sería a través de SMBus (el chip estaría en tu placa base). ¿La biblioteca VS se comunica con la placa de desarrollo ARM?
@ mjh2007 Solo tengo 2K, supongo que ese es el problema ... Intentaré reducir la necesidad de eso ...
@Nick T La biblioteca proporcionada por Invensense se comunica a través de la placa ARM con el chip. Lo estoy modificando para usarlo en el PIC18. La comunicación I2C es solo la capa inferior, luego está toda la configuración de registro y la configuración y el uso de DMP (Dynamic Motion Processor) (no puede usar sin esta biblioteca, el uso de registro directo no se proporciona en la hoja de datos). Básicamente, hay un procesador completo integrado en la IMU que debe controlarse, y de ahí surge la enorme necesidad de RAM.
@Stefano, ¿entonces vas a adjuntar un PIC a un ARM y hacer el procesamiento en el PIC? Eso parece una pérdida gratuita de recursos. La hoja de datos de IMU3000 enumera un montón de registros (0 a 0x3E), ¿hay algo más? Simplemente parece un giroscopio de 3 ejes que también puede leer otro dispositivo I2C (idealmente un acelerómetro).
Lo siento, esta es una pregunta, no una respuesta, pero estoy luchando con el mismo problema aquí, me preguntaba si logró usar este chip con un dispositivo pic18.

Respuestas (4)

Todas las variables en el programa ocupan espacio y está usando demasiado para el chip para el que está tratando de compilarlo. El programa que está tratando de compilar necesita 0x4B0 bytes (1200 en decimal), y tiene algo menos que esto.

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

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

La lectura de las Preguntas frecuentes 8 y 10 de la Guía de inicio rápido del compilador C18 de Microchip debería ayudarlo 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 del enlazador para aumentar el tamaño del banco de RAM.

eres cualquiera

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

El vinculador intenta vincular el archivo dmpDefault pero desborda los segmentos de memoria definidos por el 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 enlazador y colocando #pragmas alrededor de las variables para ubicar esas variables en esa sección.

¡Gracias a todos por su amable ayuda!

Tal vez una parte de la solución pueda ser de ayuda general: descubrí que tenía matrices constantes grandes (no había escrito el código yo mismo...) y reduje drásticamente la necesidad de RAM poniéndolas en Flash en lugar de RAM usando el palabra clave "rom" en su declaración.