2009-07-30 26 views
1

J'ai créé un petit module dans l'assembleur pour ARM, pour être lié avec mon application embarquée bare-metal.Parfois quand je reconstruis l'application, Je reçois un "Erreur [Lp002]: relocalisation échouée: valeur hors de portée ou illégale." Ce qui est encore plus déroutant, c'est que je reçois l'erreur après avoir commenté du code dans un module C.Comment réparer un "[Lp002]: la relocalisation a échoué avec les outils IAR ARM

Le manuel IAR est vague sur 're-commander la section ou le code.' Mais en regardant les fichiers assembleur générés par le compilateur à partir de mes fichiers .c, je ne vois pas de différence entre leur déclaration de section et la mienne.J'ai effectivement commencé mon code en le décochant en C puis en prenant le fichier assemblé

+0

Y at-il d'autres informations avec l'erreur? Les documents IAR indiquent qu'il doit fournir un ensemble d'informations «Kind», «Location» et «Destination». –

Répondre

1

J'ai trouvé ce qui a causé le problème, et comment implémenter une solution de contournement acceptable: dans ma source d'assembleur, j'avais une section de données et une section de code, et l'éditeur de liens les mettait trop éloignés. les à la section de code (qui a été placée dans la RAM de toute façon car elle devait être en cours d'exécution dans le contexte de l'interruption pendant que j'écrivais sur le flash interne) et maintenant je l'ai réussi à lier correctement.

C'est la question qui reste: comment dire au lieur de placer certaines sections proches les unes des autres?

1

Je reçois une mystérieuse erreur linker/compilateur, je reconstruire tout. Environ la moitié du temps, il le fixe. Je suppose que certains modules aurait dû être recompilé, mais n'a pas.

Bonne chance.

0

Regardez dans la documentation du compilateur. Habituellement, il y a une section sur les fichiers de commande de l'éditeur de liens, qui font exactement ce que vous recherchez.