Verlagern Sie eingebettete Programmierung von Keil auf Linux

Ich verwende derzeit Keil, um für ein STM32-Discovery-Board zu entwickeln. Mein Projekt ist fast fertig und ich möchte zu einer Linux-basierten Entwicklungsumgebung wechseln. Ich habe das vorkonfigurierte Flash-Tool und die STLink-Treiber für Windows verwendet, um das Board zu flashen, und ich habe keil bekommen, um eine bin-Datei zu exportieren, die ich mit qSTLink2 auf meinem Linux-Computer flashen konnte . So weit, ist es gut.

Jetzt stecke ich fest, um den Prozess des Aufbaus des gesamten Projekts zu verschieben. Speziell:

Wie portiere ich meine .uvproj-Datei in ein Makefile und berücksichtige dabei Dinge wie die Startdatei „startup_stm32l1xx_md.s“?

Ich habe es nicht in einem STM32 verwendet, insbesondere unter einer Linux-GCC-Build-Umgebung, aber Sie werden wahrscheinlich feststellen, dass GCC eine andere Startdatei benötigt. Vielleicht ist es am besten, ein bereits funktionierendes einfaches Projekt zu finden und dann Ihren Code hinzuzufügen.
Zweifellos auf die harte Tour.
Könnte ich die aktuelle .o-Datei verwenden, die Keil mit MDK-ARM generiert hat, die Kompilierung für diese eine Datei vorerst ignorieren und sie statisch einbinden?
Wie PeterJ schon geschrieben hat. Es wird eine andere Startdatei mit anderen Labels und anderer Semantik verwendet. Es sollte keine Möglichkeit geben, die Datei startup_stm32l1xx_md.o von Keil zu behalten. Hast du nicht die Quelle startup_stm32l1xx_md.s dafür?
Das tue ich, aber es scheint sich an MDK-ARM zu orientieren (oder so behauptet der Header). Ich habe es durch ein anderes ersetzt . Ich bin mir jedoch nicht sicher, was die Unterscheidung zwischen mittlerer und hoher Dichte beinhaltet.

Antworten (2)

Habe es geschafft. Ich dachte, ich würde meine Ergebnisse teilen, damit andere sie verwenden können. Danke für eure Zeit, alle.


Ich habe diese ARM-Toolchain verwendet , um mein Projekt zu erstellen, und die texane/stlink- Bibliothek, die mit dem ./st-flashTool geliefert wird, um die Binärdatei auf meinen STM32L1 zu flashen. Obwohl texane/stlink mit GDB geliefert wird, habe ich festgestellt, dass ich den Bau- und Flashprozess ohne GDB erledigen kann.

Mein Makefile sah am Ende so aus. Es ist nicht sehr hübsch oder abstrakt, aber es erledigt die Arbeit.

all:
    arm-none-eabi-gcc -T stm32l1xx.ld -mthumb -mcpu=cortex-m3 -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER startup_stm32l1xx_md.s system_stm32l1xx.c main.c [ sources ] -lm --specs=nosys.specs -o Project.elf

In welchem:

  • arm-none-eabi-gcc
    Die ARM-Toolchain
  • -T stm32l1xx.ld
    Das Linker-Dokument
  • -mthumb -mcpu=cortex-m3
    Sagen Sie GCC, das ist für einen M3
  • -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER
    Definiert für den Standard-Peripherietreiber
  • startup_stm32l1xx_md.s
    GCC-orientiertes Startdokument.
  • system_stm32l1xx.c main.c [ sources ]
    Liste meiner Quelldateien
  • -lm
    Für Math.h( L ib Math )
  • --specs=nosys.specs
    Verwenden Sie keine Systemaufrufe wie _exit.
  • -o Project.elf
    Ausgabename
Woher kommt die stm32l1xx.ldDatei?

Es gibt eine Gnu ARM-Toolchain (arm-none-eabi) und angeblich funktioniert openOCD mit gdb (obwohl ich das unter Win7 nicht realisieren konnte - openOCD verbindet sich mit einem STM32F4disco-Board OK, aber gdb hat Probleme mit der Verbindung zu openOCD ).

Wenn Sie hier ein wenig stöbern, finden Sie Links zur Toolchain, zu openOCD und zu Beispielprojekten, die die Startquelle enthalten.