裸机STM32

Bare metal STM32

我有一个使用STM32F103C8T6的项目。它有树:

 __main.c
|__main.h
|__led.c
|__led.h
|__stm32f1xx_startup.c
|__Makefile

我正在使用 arm-none-eabi-gcc 来编译这个项目。 Makefile如下:

CC = arm-none-eabi-gcc
MARCH = cortex-m3
CFLAGS = -c -mcpu=$(MARCH) -mthumb -std=gnu11 -Wall -O0
RM = rm -rf
OBJS = $(patsubst %.c,%.o,$(wildcard *.c))
INCS = $(wildcard *.h)
all: $(OBJS)
    $(CC) $(CFLAGS) $< -o $@
%.o: %.c %.h
    $(CC) $(CFLAGS) $< -o $@

.PHONY: clean
clean:
    $(RM) *.o all

当我通过 VS Code 的终端执行 运行 make 命令时,它不会生成执行文件并有这样的警告:

minh@Minh:~/Workspaces/Stm32/BeraMetal$ make
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 main.c -o main.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0   -c -o stm32f1xx_startup.o stm32f1xx_startup.c
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 led.c -o led.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 main.o -o all
arm-none-eabi-gcc: warning: main.o: linker input file unused because linking not done

请告诉我如何修复它?提前致谢。

您使用相同的标志将两个目标文件编译成目标文件,就像您尝试 link 将目标文件放在一起时一样。

问题是 linking 命令将使用 -c 标志,用于构建目标文件。

您需要将编译标志和 linker 标志分开。或者至少不在 CFLAGS.

中指定 -c

how I can fix it?

不要将 -c 传递到链接阶段。此外,您必须将所有对象传递给链接器。

CFLAGS = -mcpu=$(MARCH) -mthumb -std=gnu11 -Wall -O0
all: $(OBJS)
    $(CC) $(CFLAGS) $^ -o $@
%.o: %.c %.h
    $(CC) $(CFLAGS) -c $< -o $@

考虑使用比爷爷 Make 更新的东西 - CMake Scons Meson.