Frage

ich ein kleines Modul in Assembler für ARM erstellt, verknüpft mit meiner Bare-Metal-Embedded-Anwendung werden. Manchmal, wenn ich die Anwendung bin Wiederaufbau, ich bekommen „Error [Lp002]: Umzug fehlgeschlagen: Wert außerhalb des zulässigen Bereichs oder illegal“. Was ist noch rätselhafter ist, dass ich den Fehler immer nach einigem Code in einer C-Modul Kommentierung aus.

Das IAR Handbuch ist vage ‚Nachbestellung den Abschnitt oder den Code.‘ Aber ein Blick auf den Assembler-Dateien vom Compiler aus meinen .c-Dateien erzeugen, sehe ich keinen Unterschied zwischen ihrem Abschnitt Erklärung und meinem. Ich meinen Code tatsächlich begonnen, indem sie es Ausdrücken in C dann über die zusammengesetzte Akte.

War es hilfreich?

Lösung 2

Ich habe herausgefunden, was das Problem verursacht, und wie man eine akzeptable Lösung zu implementieren. In meiner Assembler Quelle hatte ich einen Datenabschnitt und einen Codeabschnitt, und die Linker sie zu weit voneinander entfernt wurde platzieren. Ich habe jetzt meine Variablen auf den Codeabschnitt bewegt (die ohnehin im RAM gesetzt wurde, weil es erforderlich im Interrupt-Kontext ausgeführt werden, während ich auf dem internen Flash schrieb) und jetzt bekomme ich es richtig zu verbinden.

Das ist die Frage, die bleibt: Wie der Linker sagen bestimmten Abschnitt zu platzieren nahe beieinander

Andere Tipps

Jedes Mal, wenn ich etwas mysteriös Linker / Compiler-Fehler, ich Rebuild ein All. Über die Hälfte der Zeit fixiert sie es. Meine Vermutung ist, dass einige Modul neu kompiliert worden sein, aber nicht.

Viel Glück.

Schauen Sie in der Dokumentation des Compilers. Normalerweise gibt es einen Abschnitt über Linker-Befehlsdateien, die genau tun, was Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top