Pregunta

Creé un pequeño módulo en ensamblador para ARM, que se vincularía con mi aplicación integrada de metal desnudo. A veces, cuando estoy reconstruyendo la aplicación, aparece un "Error [Lp002]: error en la reubicación: está fuera de rango o es ilegal". Lo que es aún más desconcertante es que recibo el error después de comentar algo de código en un módulo C.

El manual de IAR es vago acerca de 'reordenar la sección o el código'. Pero al observar los archivos ensambladores generados por el compilador a partir de mis archivos .c, no veo ninguna diferencia entre la declaración de su sección y la mía. De hecho, comencé mi código parándolo en C y luego tomando el archivo ensamblado.

¿Fue útil?

Solución 2

Encontré qué causó el problema y cómo implementar una solución aceptable. En la fuente de mi ensamblador tenía una sección de datos y una sección de código, y el enlazador los estaba ubicando demasiado separados. Ahora he movido mis variables a la sección de código (que de todos modos se colocó en la RAM porque tenía que estar ejecutándose en un contexto de interrupción mientras escribía en el flash interno) y ahora lo hago para enlazar correctamente.

Esta es la pregunta que queda: ¿cómo decirle al vinculador que coloque cierta sección cerca una de la otra?

Otros consejos

Cada vez que obtengo un error misterioso de vinculador / compilador, hago una Reconstrucción de todos. Aproximadamente la mitad del tiempo lo arregla. Mi conjetura es que algún módulo debería haber sido recompilado, pero no lo hizo.

Buena suerte.

Busque en la documentación del compilador. Por lo general, hay una sección sobre los archivos de comando del vinculador, que hace exactamente lo que está buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top