Pregunta

Para un sistema embebido, necesito colocar algunas estructuras de datos en direcciones fijas, para que una CPU de control separada pueda acceder a ellas en una ubicación conocida. Estoy usando scripts de enlazador para el objetivo incrustado para lograr esto, más #defines de esas mismas direcciones para la CPU de control.

Me molesta que estas constantes de dirección se definan en dos lugares, el script de enlace y un archivo de encabezado. Me gustaría tener solo uno. La mejor solución que he encontrado hasta ahora es hacer que el Makefile ejecute cpp en el script del enlazador, lo que le permite #incluir el mismo encabezado.

¿Hay una mejor manera de lograr esto? ¿Hay alguna opción poco conocida para ld o una convención de nomenclatura para el script de enlace que lo ejecutará automáticamente a través de cpp?

¿Fue útil?

Solución

Esta no es la solución que está buscando, pero una opción es utilizar el sistema de compilación para configurar estos valores. Cree un config.h.in y un target.ld.in que actúen como plantillas y haga que el sistema de compilación produzca un config.h con la definición correcta y un target.ld con la dirección correcta para el objetivo que está creando.

Utilizamos CMake para nuestros sistemas integrados y es compatible con este tipo de cosas. GNU autoconf también lo hace, pero nunca me gustó personalmente personalmente.

Otros consejos

Puede usar la construcción específica C incorporada @ para colocar un objeto en cualquier lugar del espacio de direcciones.

static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;

Suponiendo una MCU de 32 bits.

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