stm32g4 の開発環境構築 Linux編
先日Windows版の環境を作ったばっかりだが、デバッグに使うOPENOCDがG4対応していなくて自前でビルドしなくては行けないという情報を得てやっぱり自前でビルドするとなるとLinuxでやったほうがいいなと思ってLinux上に開発環境を構築することとした。
基本的な構築は前回の omonting.hatenablog.com とほとんどおなじなので同じ部分は割愛する。
必要なソフトウェア
GNU Arm Embedded Toolchain
GNU Arm Embedded toolchain は展開したフォルダを\opt内に配置
パスを通す
zshを使っているので、~/.zshrcの一番下に
export PATH="/opt/gc-arm-none-eabi-9-2020-q2-update/bin:$PATH"
を記載。
c_cpp_properties.json
下記に変更
"compilerPath": "/opt/gc-arm-none-eabi-9-2020-q2-update/bin/arm-none-eabi-g++",
Makefileの編集
今回のプロジェクトは基本C++で書こうと思っている。
CubeMXの吐き出したMakefileとソースコードはCソースコード吐き出しでMakefileもそのようになっていたので、C++もコンパルできるように修正。
ファイル名を
main.c => main.cpp
stm32g4xx_it.c => stm32g4xx_it.cpp
に変更。
# debug build? DEBUG = 0 # optimization OPT = -O3
に変更、MCUのファーム開発は僕は最適化効かせてdebug中に必要な箇所のみ一時的に最適化をきってdebugしている。
C_SOURCES 内からmain.cとstm32g4xx_it.cを削除 書きを追記
# CPP sources CXX_SOURCES = \ Src/main.cpp \ Src/stm32g4xx_it.cpp
cppのコンパイラを定義
CXX = $(GCC_PATH)/$(PREFIX)g++
CFLAGSの下に書きを追記
CXXFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -isystem -std=c++17
ほかはCFLAGSと同様に処理しておく。
ビルド設定の部分を下記のように書き換え
####################################### # build the application ####################################### # list of objects OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) vpath %.c $(sort $(dir $(C_SOURCES))) OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o))) #追記 vpath %.cpp $(sort $(dir $(CXX_SOURCES))) #追記 # list of ASM program objects OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_SOURCES))) $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) $(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ # CC->CXXに変更 $(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR) #追記 $(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@ #追記 $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) $(AS) -c $(CFLAGS) $< -o $@ $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(CXX) $(OBJECTS) $(LDFLAGS) -o $@ #CC->CXXに変更 $(SZ) $@ $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(HEX) $< $@ $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(BIN) $< $@ $(BUILD_DIR): mkdir $@
以上で完了。