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:0
steht 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
STM32 toolchain
? Es gibt nur eineSTM32 standard library
.Antworten:
Möglicherweise benötigen Sie auch
-mthumb -mno-thumb-interwork -mfpu=vfp -msoft-float -mfix-cortex-m3-ldrd
als Compiler Optionen fürarm-none-eabi-gcc
. Verwenden Sie für den Assembler-mcpu=cortex-m3 -mthumb
als Optionen.Bearbeiten:
Die
-mthumb
Schalter 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-float
fü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-ldrd
Anwendungen finden Sie in der Errata-Dokumentation für die Cortex M3-Kernversionen.Weitere Informationen finden Sie in der GCC-Dokumentation und im ARM-Infocenter .
quelle
Ü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:
Sie sollten so etwas wie ARM-Elf Little Endian sehen. Wenn Sie dies nicht tun, sollten Sie Ihr Makefile / Build-Skript reparieren.
quelle
startup_stm32f2xx.o
wird nicht erstellt. Ich habe nur die.s
Datei. Ich habe einen vollständigen Speicherauszug der obigen Fehlermeldung hinzugefügt.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 .
quelle