Forum: Mikrocontroller und Digitale Elektronik Makefile für STM32


von Jonas B. (holocron)


Lesenswert?

Hallo,
ich wollte für mein STL µC ein Makefile schreiben, allerdings bin ich 
noch etwas ratlos wie ich das anstellen soll. Ich hab erst mal versucht 
Teile von meinem C++ Makefile zu übernehmen, kombiniert mit einem das 
ich im Internet gefunden hab (das auskommentierte sind Flags ,deren Sinn 
ich noch nicht herausgefunden hab):

.SUFFIXES:
.PHONY: all compile test
.PRECIOUS: %.o

CC=arm-none-eabi-gcc
SF=st-flash

CFLAGS  = -std=gnu99 -g -Wall -pedantic -Wextra -specs=nosys.specs
#CFLAGS += -mlittle-endian -mthumb -mthumb-interwork
#CFLAGS += -fsingle-precision-constant -Wdouble-promotion

HEADERS = $(wildcard *.h)
MAIN_BINARIES = $(basename $(filter %Main.cpp, $(wildcard *.cpp)))
OBJECTS = $(addsuffix .o, $(basename $(filter-out %Main.cpp %Test.cpp, 
$(wildcard *.cpp))))
LIBEARIES =

all: compile checkstyle

compile: $(MAIN_BINARIES)

checkstyle:
  python3 ../cpplint.py --repository=. *.c *.h

%Main: %Main.o $(OBJECTS)
  $(CC) $(CFLAGS) -o $@ $^ $(LIBARIES)

%.o: %.c $(HEADERS)
  $(CC) $(CFLAGS) -c $<

clean:
  rm -f *.o *.elf *.bin

Allerdings wird noch nicht mal irgendwas ausgeführt oder kompiliert. Wie 
ich flashen kann bin ich auch noch unsicher. Hat da jmd. eine Idee? 
Benutzt man überhaupt in "richtigen" µC-Projekten noch händische 
Makefiles?

Mein µC ist der STM32 by ST NUCLEO-L432KC.

Danke und Grüße

: Bearbeitet durch User
von Hääääääääääääääääääääääää# (Gast)


Lesenswert?

Benutz einfach die IDE von ST und fertig. Immer diese Bastelei ...

von meiomei (Gast)


Lesenswert?

Jonas B. schrieb:
> Benutzt man überhaupt in "richtigen" µC-Projekten noch händische
> Makefiles?

"Man" schon, aber du besser nicht!

Mein Vorrednder hat es dir schon gesagt was zu tun ist.

von A. B. (Gast)


Lesenswert?

Was hat das mit STM32 zu tun? Wenn man ein Makefile erstellen will und 
nicht weiß, wie es geht, besorgt man sich die Literatur z. B. zu GNU 
Make 
(https://www.gnu.org/software/make/manual/make.html#Simple-Makefile) und 
macht's danach. Wozu gibt's diese Doku wohl???
Und wenn man sich nicht die Mühe machen WILL, das zu lernen, läßt man 
es einfach.

von pegel (Gast)


Lesenswert?

Das Beste ist, dass die CubeIDE sogar ein Makefile für dich erstellt.

von Jonas B. (holocron)


Lesenswert?

Hallo,
danke für die Tipps. Mit der CubeIDE klappt das prima. Aber woran ich 
gerade rätsle: wie kann ich denn die Register ansprechen? Ich wollte 
stm32f10x_map.h inkludieren, aber die wird von der IDE nicht erkannt.

von W.S. (Gast)


Lesenswert?

Jonas B. schrieb:
> Aber woran ich
> gerade rätsle: wie kann ich denn die Register ansprechen? Ich wollte
> stm32f10x_map.h inkludieren, aber die wird von der IDE nicht erkannt.

Normalerweise spricht an die Hardwareregister mit den Namen an, die sie 
im Referenzmanual haben. Kann bei ST aber auch anders sein.

Und du kämpfst gerade gegen deine IDE. Wieso eigentlich?

Mir wäre es schnurz, wenn eine IDE irgend eine Datei "nicht erkennt" 
(was soll das eigentlich heißen:'nicht erkannt'?).
Ich würde schlichtweg in die Quelle schreiben
#include "stm32f10x_map.h"
und besagte Headerdatei in das Verzeichnis kopieren, wo auch die 
C-Quelle steht. Dann sollte die IDE eigentlich keinen Spuk um diese 
Datei mehr machen können. Ja, ist ein bissel Holzhammer, aber erstmal 
besser als garnix.

Allerdings vermute ich mal, daß besagte Datei irgendwo außerhalb des 
gerade angesagten Such-Bereiches liegt und schlichtweg nicht GEFUNDEN 
wird anstelle nicht erkannt.

W.S.

von pegel (Gast)


Lesenswert?

Die Frage ist, ob das Contiki Betriebssystem benutzt werden soll, oder 
ob es wirklich nur um Registernamen geht, weil die zufällig in der Datei 
stehen.

Wenn Contiki, hat das wenig mit CubeIDE zu tun und verlangt ein anderes 
Vorgehen.

Für CubeIDE stehen die Register in der stm32f103xb.h .

von Axel S. (a-za-z0-9)


Lesenswert?

Jonas B. schrieb:
> Ich wollte stm32f10x_map.h inkludieren,
> aber die wird von der IDE nicht erkannt.

Du sprichst wirr.

Was du wohl meintest: der Compiler (genauer: der Präprozessor) wirft 
eine Fehlermeldung für die Zeile mit dem #include, weil er die zu 
includierende Datei nicht findet.

Ich empfehle einen Blick in die Dokumentation des Compilers, konkret den 
Teil, der die "-I" Kommandozeilenoption erklärt.

Eine IDE ist am Ende nur ein GUI, das einen Editor, den Compiler, ein 
Flash-Tool und den Debugger aufruft. Also bis auf den Editor im Prinzip 
das gleiche macht wie ein Makefile. Manche Leute finden es praktisch, 
daß man die Suchpfade für #include Files bei einer IDE in einem 
Popup-Dialog zwei oder drei Ebenen tief verschachtelt eintragen kann. 
Ich finde das umständlich (umständlicher als die CFLAGS Variable im 
Makefile zu setzen jedenfalls). YMMV.

von Bauform B. (bauformb)


Lesenswert?

pegel schrieb:
> Für CubeIDE stehen die Register in der stm32f103xb.h

Das halte ich für ein Gerücht, weil:

Jonas B. schrieb:
> Mein µC ist der STM32 by ST NUCLEO-L432KC.

Und dabei bin ich auch skeptisch:

Jonas B. schrieb:
> Ich wollte stm32f10x_map.h inkludieren

von pegel (Gast)


Lesenswert?

Gut, alternativ in der:

stm32l432xx.h

von Jonas B. (holocron)


Lesenswert?

Hallo,
alles klar, vielen Dank für die Antworten und Tipps. Ich konnte alle 
Headerfiles finden und hat alles geklappt.

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.