Pergunta

Eu criei um pequeno módulo em assembler para ARM, a ser ligados entre si com o meu aplicativo incorporado bare-metal. Às vezes, quando estou reconstruindo o aplicativo, recebo um "Erro [Lp002]: deslocalização falhou: valorizado fora de alcance ou ilegal". O que é ainda mais intrigante é que eu estou recebendo o erro depois de comentar algum código em um módulo C.

O manual do IAR é vago sobre 're-ordenar a seção ou o código.' Mas olhando para os arquivos assembler gerados pelo compilador de meus arquivos .c, não vejo diferença entre a sua declaração de seção e meu. Na verdade, comecei meu código por arrancar-lo em C, em seguida, assumir o arquivo montado.

Foi útil?

Solução 2

Eu encontrei o que causou o problema, e como implementar uma solução aceitável. Na minha fonte assembler eu tinha uma seção de dados e uma seção de código, e o ligador foi colocando-os muito distantes. Eu já mudei meus variáveis ??para a secção de código (que foi colocado na RAM de qualquer maneira, porque ele precisava ser executado em contexto de interrupção enquanto eu estava escrevendo para o flash interno) e agora eu entendo a ligação corretamente.

Esta é a questão que permanece: como dizer o vinculador para colocar determinada seção perto um do outro

?

Outras dicas

Sempre que tenho algum erro vinculador / compilador misteriosa, eu a reconstruir tudo. Cerca de metade do tempo que resolve o problema. Meu palpite é que algum módulo deveria ter sido recompilados, mas não o fez.

Boa sorte.

Procure na documentação do compilador. Normalmente, há uma seção sobre arquivos de comando vinculador, que fazem exatamente o que você está procurando.

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