Como corrigir a "[Lp002]: deslocalização falhou com ferramentas IAR ARM?
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.
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.