Fehler beim Kompilieren der Startdatei auf STM32


7

Ich versuche, benutzerdefinierte Interrupt-Handler für meinen Cortex M3 bereitzustellen (Referenzhandbuch hier ). ST stellt freundlicherweise eine Standardbibliothek zur Verfügung, die verschiedene Startdateien mit dem Namen "startup_stm32f2xx.s" enthält. Jeder befindet sich je nach IDE in einem anderen Ordner.

Jetzt verwende ich keine IDE (ich kompiliere direkt mit Yagarto, einer modifizierten Version der gcc-Toolchain). Ich habe bereits gefragt, welches Start-up ich verwenden soll. Nachdem ich jetzt alle verfügbaren Startdateien ausprobiert habe, erhalte ich immer den gleichen Fehler:

/startup_stm32f2xx.s:1:0: Fehler: Die Ziel-CPU unterstützt den ARM-Modus nicht

Eine schnelle Google-Suche zeigt, dass dies wahrscheinlich bedeutet, dass der Assembler-Code Anweisungen enthält, die mein ARM nicht verstehen kann. Dies ist überraschend, da der Code für mein Board bereitgestellt wurde.

Wie kann ich die Startdatei kompilieren, die den Interrupt-Vektor auf meinem STM32 definiert?

Bearbeiten: In jeder der Dateien startup_stm32f2xx.s:1:0steht der Beginn eines Kommentars. Außerdem benutze ich die Flagge -mcpu=cortex-m3. Hier ist die vollständige Fehlermeldung:

$ make all
arm-none-eabi-gcc -x assembler-with-cpp -c -g -mcpu=cortex-m3 -gdwarf-2 -Wa,-amhls=startup_stm32f2xx.lst   startup_stm32f2xx.s -o startup_stm32f2xx.o
startup_stm32f2xx.s:1:0: error: target CPU does not support ARM mode
makefile:46: recipe for target `startup_stm32f2xx.o' failed
make: *** [startup_stm32f2xx.o] Error 1

Ignorante Frage: Ist Yagarto mit der STM32-Toolchain kompatibel?
— Clabacchio

Was meinst du damit STM32 toolchain? Es gibt nur eine STM32 standard library.
— Randomblue

AFAIK-Mikrocontroller werden mit einem Toolset geliefert, mit dem die Binärdateien auf das Mikro geschrieben werden können. Ist die Bibliothek mit Ihrer Familie kompatibel?
— Clabacchio

Um die Binärdateien auf den Mikroprozessor zu schreiben, verwende ich OpenOCD (über JTAG), das keine besondere Beziehung zum STM32 hat.
— Randomblue

Antworten:


7

Möglicherweise benötigen Sie auch -mthumb -mno-thumb-interwork -mfpu=vfp -msoft-float -mfix-cortex-m3-ldrdals Compiler Optionen für arm-none-eabi-gcc. Verwenden Sie für den Assembler -mcpu=cortex-m3 -mthumbals Optionen.

Bearbeiten:

Die -mthumbSchalter gcc und der Assembler wechseln in den "Daumen" -Modus - sie generieren standardmäßig Anweisungen für den Armmodus, die auf Cortex M3 nicht funktionieren.

Da es keinen ARM-Modus gibt, benötigen wir kein ARM / Tumb-Interworking -mno-thumb-interwork.

Der Compiler, der -mfpu=vfp -msoft-floatfür die Gleitkommaunterstützung benötigt wird . Cortex M3 hat kein Hardware-Gleitkomma-AFAIK, zumindest ist mir kein Silizium bekannt, das sowohl Cortex M3 als auch Gleitkomma in Hardware enthält. Es gibt einige Cortex M4, die haben.

Die meisten Cortex M3- -mfix-cortex-m3-ldrdAnwendungen finden Sie in der Errata-Dokumentation für die Cortex M3-Kernversionen.

Weitere Informationen finden Sie in der GCC-Dokumentation und im ARM-Infocenter .


3
Dies ist sehr wahrscheinlich wahr, aber bitte erklären Sie, was jeder von ihnen bedeutet und warum sie wichtig sind.
— AngryEE

0

Überprüfen Sie, ob Sie den richtigen Assembler verwenden, um startup_stm32f2xx.o zu erstellen. Geben Sie Folgendes ein, um herauszufinden, für welche Architektur Sie zusammengestellt haben:

file startup_stm32f2xx.o

Sie sollten so etwas wie ARM-Elf Little Endian sehen. Wenn Sie dies nicht tun, sollten Sie Ihr Makefile / Build-Skript reparieren.


Die Datei startup_stm32f2xx.owird nicht erstellt. Ich habe nur die .sDatei. Ich habe einen vollständigen Speicherauszug der obigen Fehlermeldung hinzugefügt.
— Randomblue

0

Ich hatte das gleiche Problem, als ich von Em :: Blocks zu IDE-less-GCC-basierter Entwicklung wechselte. Seltsamerweise liefert ST Microelectronics Startdateien, die mit den Toolchains der größten IDEs kompatibel sind. Sie bieten jedoch keine, die mit GAS (dem GCC-Assembler) funktioniert.

Ich könnte mir helfen, nur die Startdatei zu verwenden, die in Em :: Blocks enthalten war.

Hier ist mein Beitrag zu Stack Overflow .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.