Question

J'ai créé un petit module en assembleur pour ARM, à associer à mon application incorporée en métal nu. Parfois, lorsque je reconstruis l'application, le message "Erreur [Lp002]: échec de la relocalisation: valeur hors de portée ou illégale". Ce qui est encore plus étonnant, c’est que je reçois l’erreur après avoir commenté du code dans un module C.

Le manuel IAR est vague sur la "réorganisation de la section ou du code". Mais en regardant les fichiers assembleurs générés par le compilateur à partir de mes fichiers .c, je ne vois aucune différence entre leur déclaration de section et la mienne. En fait, j'ai commencé mon code en le stubant en C, puis en reprenant le fichier assemblé.

Était-ce utile?

La solution 2

J'ai trouvé la cause du problème et comment mettre en œuvre 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 plaçait trop loin les unes des autres. J’ai maintenant déplacé mes variables dans la section de code (qui a été placée dans la mémoire vive car elle devait fonctionner dans un contexte d’interruption pendant que j’écrivais dans la mémoire flash interne) et j’obtiens maintenant un lien approprié.

Telle est la question qui reste: comment dire à l'éditeur de liens de placer certaines sections les unes à côté des autres?

Autres conseils

Chaque fois que j'obtiens une erreur mystérieuse d'éditeur de liens / compilateur, je fais un Rebuild All. Environ la moitié du temps, ça le répare. Je suppose que certains modules auraient dû être recompilés, mais ne l’ont pas fait.

Bonne chance.

Consultez la documentation du compilateur. En général, il existe une section sur les fichiers de commande de l’éditeur de liens, qui font exactement ce que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top