Pergunta

Para um sistema embarcado eu preciso colocar algumas estruturas de dados em endereços fixos, de modo que uma CPU de controle separado pode acessá-los em um local conhecido. Estou usando scripts de vinculador para o alvo incorporado para alcançar este objetivo, mais #defines desses mesmos endereços para o CPU de controlo.

Incomoda-me que estas constantes de endereço são, portanto, definido em dois lugares, o script vinculador e um arquivo de cabeçalho. Eu gostaria de ter apenas um. A melhor solução que eu vim acima com até agora é ter o CPP prazo Makefile no roteiro vinculador, permitindo-lhe # include o mesmo cabeçalho.

Existe uma maneira melhor de fazer isso? Existe alguma opção conhecida-pouco a ld ou uma convenção de nomenclatura para o script de vinculador que irá executá-lo automaticamente através do CPP?

Foi útil?

Solução

Esta não é a solução que você está procurando, mas uma opção é utilizar o sistema de compilação para configurar esses valores. Criar um config.h.in e uma target.ld.in que atua como modelos e têm o sistema de compilação produzir um config.h com a correta definição e um target.ld com o endereço correto para o destino que você está construindo.

Nós usamos CMake para os nossos sistemas embarcados e suporta esse tipo de coisa. GNU autoconf faz também, mas eu nunca realmente gostei pessoalmente.

Outras dicas

Você pode usar a construção específica incorporado-C @ para colocar um em qualquer lugar objeto no espaço de endereço.

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

Assumindo um MCU de 32 bits.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top