gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

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]

後は適当に作っておきます。フォルダをうまく配置して終わりってかんじです。