arm-gccを使ってみる
はい。いきなり結果です。コンパイルしてみました。 今後HAL使います。使いたくなかったんだけど時代の流れもあり、こだわり続けられないというかんじ?ですかね。 メイクファイルは書かないとならないですが、がんばりましょう(苦笑)。 一応ライセンスフリーなんですが参考にしまくったのでってか使えすぎて困るXD。
http://urin.github.io/posts/2013/simple-makefile-for-clang/
makefileの例を載せておきます。結構困るので。。。
[shell] #
This makefile is made for stm32f103 using HAL driver based autogenerated at mbed online compiler.
based platform is [NUCLEO stm32f103].
GCC_BIN = PROJECT = LED_Blink
use debugger?
DEBUG = 1
DRIVERSDIR = ./Drivers HALDIR = $(DRIVERSDIR)/STM32F1xx_HAL_Driver CMSISDIR = $(DRIVERSDIR)/CMSIS CMSIS_DEVICEDIR = $(CMSISDIR)/Device/ST/STM32F1xx
OBJDIR=./obj
USR_SRCDIR = ./Src HAL_SRCDIR = $(HALDIR)/Src
STARTUP_SRC = $(DRIVERSDIR)/startup_stm32f103xe.s STARTUP_OBJ = startup.o
BINDIR = ./bin
SOURCES = \ $(wildcard $(USR_SRCDIR)/.c) \ $(wildcard $(HAL_SRCDIR)/.c)
SYS_OBJECTS = $(addprefix $(OBJDIR)/, $(notdir $(SOURCES:.c=.o)))\ $(OBJDIR)/$(STARTUP_OBJ)
INCLUDEDIRS = -I./Inc\ -I$(HALDIR)/Inc\ -I $(CMSISDIR)/Inc\ -I $(CMSIS_DEVICEDIR)/Inc
LINKER_SCRIPT = $(DRIVERSDIR)/STM32F103VETx_FLASH.ld
CC = $(GCC_BIN)arm-none-eabi-gcc CPP = $(GCC_BIN)arm-none-eabi-g++ LD = $(GCC_BIN)arm-none-eabi-gcc OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump SIZE = $(GCC_BIN)arm-none-eabi-size
CPU = -mcpu=cortex-m3 -mthumb
CC_FLAGS = $(CPU) -c -g -fno-common -fmessage-length=0 -Wall -Wextra -fno-exceptions -ffunction-sections -fdata-sections -fomit-frame-pointer -MMD -MP
CC_SYMBOLS = -DTARGET_FF_ARDUINO -DTARGET_NUCLEO_F103RB -DTOOLCHAIN_GCC -DTARGET_FF_MORPHO -DTARGET_LIKE_CORTEX_M3 -DTARGET_CORTEX_M -DTARGET_LIKE_MBED -DTARGET_STM32F1 -DMBED=1 -DARM_MATH_CM3 -DMBED_BUILD_TIMESTAMP=1463831794.11 -DTARGET_STM -DTOOLCHAIN_GCC_ARM -D__CORTEX_M3 -DTARGET_M3 -DTARGET_STM32F103RB
LD_FLAGS = $(CPU) -Wl,--gc-sections --specs=nano.specs -u printf_float -u scanf_float -Wl,-Map=$(BINDIR)/$(PROJECT).map,-cref LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
ifeq ($(DEBUG), 1) CC_FLAGS += -DDEBUG -O0 else CC_FLAGS += -DNDEBUG -Os endif
.PHONY: all clean lst size disp
all: $(BINDIR)/$(PROJECT).bin $(BINDIR)/$(PROJECT).hex size
clean: rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJDIR) $(BINDIR) -rf
$(OBJDIR)/$(STARTUP_OBJ): $(STARTUP_SRC) $(CC) $(CPU) -c -x assembler-with-cpp -o $@ $<
$(OBJDIR)/%.o: $(HAL_SRCDIR)/%.c -mkdir -p $(OBJDIR) $(CC) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99 $(INCLUDEDIRS) -o $@ $<
$(OBJDIR)/%.o: $(USR_SRCDIR)/%.c -mkdir -p $(OBJDIR) $(CC) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99 $(INCLUDEDIRS) -o $@ $<
$(BINDIR)/$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS) -mkdir -p $(BINDIR) $(LD) $(LD_FLAGS) -T $(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ -Wl,--start-group $(LIBRARIES) $(LD_SYS_LIBS) -Wl,--end-group
$(BINDIR)/$(PROJECT).bin: $(BINDIR)/$(PROJECT).elf $(OBJCOPY) -O binary $< $@
$(BINDIR)/$(PROJECT).hex: $(BINDIR)/$(PROJECT).elf @$(OBJCOPY) -O ihex $< $@
$(BINDIR)/$(PROJECT).lst: $(BINDIR)/$(PROJECT).elf @$(OBJDUMP) -Sdh $< > $@
lst: $(PROJECT).lst
size: $(BINDIR)/$(PROJECT).elf $(SIZE) $(BINDIR)/$(PROJECT).elf
DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d) -include $(DEPS)
[/shell]
後は適当に作っておきます。フォルダをうまく配置して終わりってかんじです。