このチュートリアルでは、 CMakeビルド ジェネレーター、 Ninjaビルド ツール、 GCCコンパイラーを使用して、 Visual Studio Codeで STM32 アプリケーションを効果的に開発およびデバッグする手順について説明します。
学ぶこと
すべてのツールをインストールしてセットアップする方法
STM32CubeMX または STM32CubeIDE ツールを使用して新しい STM32 プロジェクトを作成する方法
開発を容易にするためにVisual Studio Codeの推奨拡張機能をインストールしてセットアップする方法
CMake リストと CMake プリセットをセットアップする方法
コンパイラ用のビルドシステムを生成する方法
GCC でプロジェクトをコンパイルする方法
アプリケーションを STM32 ターゲットにフラッシュしてデバッグする方法
このチュートリアルではWindowsオペレーティング システムを使用します。同様の手順が Linux および MAC オペレーティング システムにも適用されます。
ツールのインストール チュートリアルは、STM32 を使用するために必要なツールを理解するのに役立ちます。一般に、初心者がすぐに理解して必要な要件を正しく理解するのに適しています。
しばらくしてから、ST には新しい STM32CubeCLT ソフトウェア ツールがあり、vscode に必要なビルド ツール、 Ninjaビルド システム、 CMakeビルド ジェネレーターが含まれています。 STM32CubeCLT (コマンド ライン ツール) は、vscode 開発のスピードをすぐに高めるためのシンプルかつ簡単な方法です。また、ビルド環境変数 (Windows の場合はPath ) が自動的に設定されるため、コマンド ライン ツールからninja 、 cmakeまたはその他のコマンドを直接呼び出すことができます。
STM32CubeCLT をインストールしても、 STM32CubeIDEグラフィカル ツールや MCU 構成ツール機能は取得されず、通常はvscode内からビルドとデバッグを呼び出すコマンド ライン ツールのみが取得されます。 vscode と必要な拡張機能を個別にインストールする必要があります。
最初のステップは STM32CubeIDE をインストールすることです。これは新しいSTM32プロジェクトを簡単に開始するために使用されます。これには統合されたSTM32CubeMXツールが付属しており、グラフィカルな設定が可能です。
STM32CubeIDE は、 VSCode開発に後で必要となる必要なツールも提供します
ARM なし eabi GCC コンパイラ
デバッグ用の ST-LINK GDBServer
コードをダウンロードするための STM32CubeProgrammer ツールとそれぞれの ST-Link ドライバー
STM32 SVD ファイルが含まれるフォルダー
ST-Link用ドライバー
環境パスの設定
STM32CubeIDE のインストールから環境設定に3パスを追加する必要があります (上記のツールごとに 1 つのパス)。私のコンピュータの場合、STM32CubeIDE 1.8 (Eclipse を通じて更新されているため、実際のインストール パスはまだバージョン1.0.2と表示されています) を使用しており、パスは次のように定義されています。
GCC コンパイラー: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346toolsbin
ST-Link GDB サーバー: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_2.0.100.202109301221toolsbin
STM32Cube プログラマー CLI: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_2.0.100.202110141430toolsbin
パスはバージョン番号によって異なる場合があります
正しいパス設定を確認し、次を実行します。
arm-none-eabi-gcc --version STM32_Programmer_CLI --version ST-LINK_gdbserver --version
以下の図のような出力が生成されるはずです
STM32CubeCLTを使用してビルド ツールをインストールしている場合、この手順は必要ありません。
CMakeをダウンロードしてインストールします。
インストール ウィザードでは、CMake を環境パスに追加するように求められます。オプションを選択するか、CMake インストールフォルダーのbinフォルダーを環境パスに追加します。
STM32CubeCLTを使用してビルド ツールをインストールしている場合、この手順は必要ありません。
Github リリース ページから Ninja ビルド システムをダウンロードします。ポータブルな実行可能ファイルとして提供されるため、何もインストールする必要はありません。ただし、以前のすべてのツールと同様に、環境レベルで表示できる必要があります。
CMakeとNinja のインストールを確認し、次を実行します。
cmake --version ninja --version
出力は次のようになります。
VSCodeをダウンロードしてインストールします。インストールして開くと、ウィンドウは次のようになります。
Visual Studio Code は、拡張機能を使用して拡大する機能を備えた軽量のテキスト エディターです。
CMake を使用した STM32 開発に役立つ拡張機能のリスト:
ms-vscode.cpptools : C/C++ 開発のための構文の強調表示とその他のコア機能
ms-vscode.cmake-tools : CMake コア ツール、ビルド システム ジェネレーター ツール
twxs.cmake : CMake カラー強調表示
marus25.cortex-debug : Cortex-M デバッグ拡張機能、VSCode からの STM32 デバッグに必須
dan-c-underwood.arm : ARM アセンブリ構文ハイライター
zixuanwang.linkerscript : GCC リンカー スクリプト構文ハイライター
VSCode の内部ターミナル ウィンドウで以下のコマンドをコピーすることでインストールできます。
code --install-extension ms-vscode.cpptools code --install-extension ms-vscode.cmake-tools code --install-extension twxs.cmake code --install-extension marus25.cortex-debug code --install-extension dan-c-underwood.arm code --install-extension zixuanwang.linkerscript
[ターミナル] -> [新しいターミナル]に移動して、新しいターミナル ウィンドウを開きます。
別の方法は、拡張機能検索 GUI を使用し、そこから手動でインストールすることです。
この時点で、すべてのツールが適切にインストールされています。成功に向けて正しい軌道に乗っています。
先に進むための基本的な要件は、 CMakeに変換され、 VSCodeで開発される、動作するプロジェクトを用意することです。この目的のために、 STM32CubeMXまたはSTM32CubeIDEソフトウェア ツールを使用して簡単な新しいプロジェクトを作成する方法を説明します。
すでに取り組んでいるプロジェクトがある場合は、この部分をスキップできます。
このデモではSTM32CubeIDEツールと STM32H735G-DK ボードを使用しました。
STM32CubeIDE を開いて新しいプロジェクトを開始します
STM32 MCU を選択 - STM32H735G-DKボードで使用されるSTM32H735IG を選択しました
プロジェクト名とパスを選択してプロジェクトを作成し、ピン配置ビューが開くまで待ちます
私たちのタスクは、LED を切り替える単純なプロジェクトを作成することです。 LED はそれぞれPC2とPC3に接続されており、アクティブ LOW です。ピンは出力プッシュプルまたはオープンドレインモードで構成可能
オプションのラベルをそれぞれLED1およびLED2として使用して、ピンを出力として設定します。
STM32CubeMX使用している場合は、プロジェクト マネージャーに移動し、プロジェクト名を設定し、 STM32CubeIDEがToolchainとして選択されていることを確認します。
詳細設定に移動し、生成されたコードのドライバーとしてLL選択します
このチュートリアルではわかりやすくするために LL ドライバーを使用しています。
赤いボタンを押すか、 CTRL + Sショートカットでプロジェクトを保存して、プロジェクトを再生成します。
プロジェクトが(再)生成されました。黄色で強調表示されたファイルはビルドするソースです。青はリンカースクリプトです。
最初の実行はこれで終わりです。コンパイルの準備は完了です。 CTRL + B押すか、ハンマーアイコンをクリックして開始します。 STM32CubeIDE がプロジェクトをコンパイルします。下の図のように表示されるはずです。これで、MCU のフラッシュをフラッシュしてデバッグを開始する準備が整いました。
これで、プロジェクトを正常に作成した最初の部分は終了です。この時点で、プロジェクトは CMake ベースのビルド システムに転送する準備ができていると考えられます。
今後も STM32CubeIDE を使用して開発を継続し、新しいソースの追加、コードの変更、コンパイル、バイナリのフラッシュ、マイクロコントローラの直接デバッグを行うことができます。これは、STMicroelectronics によって開発および保守されている推奨 STM32 開発スタジオです。
VSCodeで開発するプロジェクトが作成されているはずです。ここでは GCC コンパイラーについて進めますが、他のコンパイラーも使用できます。
Visual Studio Code のリリースにより、多くの開発者が多くのプログラミング言語でこのツールを使用し、幸いにも 1 つのツールで STM32 アプリケーションを開発できるようになりました。あなたが VSCode を好む開発者の 1 人である場合、次に進むための最もエレガントな方法は、STM32CubeIDE ベースのプロジェクトをCMakeに転送し、VSCode でコードを開発し、GCC コンパイラを使用して Ninja ビルド システムでコンパイルすることです。高速かつ軽量です。
VSCode での開発は、中級または経験豊富なユーザーを対象としています。すべての STM32 初心者には、 STM32CubeIDE開発ツールチェーンを使い続けることをお勧めします。先に進み、後で VSCode のトピックに戻るのは非常に簡単です。
すべての CMake ベースのアプリケーションには、ルート ディレクトリにCMakeLists.txtファイルが必要です。このファイルは、プロジェクトを説明し、ビルド システム生成のための入力情報を提供します。
ルート
CMakeLists.txtファイルはトップレベル CMakeファイルと呼ばれることもあります
CMakeLists.txtファイルに記載されている重要なこと:
ビルドフラグを使用した GCC 構成などのツールチェーン情報
プロジェクト名
コンパイラでビルドするソース ファイル、C、C++、またはアセンブリ ファイル
コンパイラが関数、定義などを検索するためのインクルード パスのリスト ( -I )
リンカスクリプトのパス
コンパイル定義、またはプリプロセッサ定義( -D ) と呼ばれることもあります
命令セット生成のための Cortex-Mxx と浮動小数点の設定
Visual Studio Code がインストールされており、さらなるファイル エディターとして使用されます。
生成されたプロジェクトのパスを見つけて、VSCode でフォルダーを開きます。
オプション 1: エクスプローラーでフォルダーに移動し、右クリックしてOpen in Codeを選択します。
オプション 2: または、VScode を新しい空のソリューションとして開き、フォルダーを手動で追加します。 File -> Open Folder...を使用してフォルダーを開きます
オプション 3: cmd または powershell ツールを使用してフォルダーに移動し、 code .
最終結果は以下のようになります。
CMake は、最終的にプロジェクトをコンパイルするために使用するツールチェーンを認識する必要があります。通常、同じツールチェーンが異なるプロジェクト間で再利用されるため、再利用しやすいようにこの部分を別のファイルに作成することをお勧めします。これらは一般的なコンパイラ設定であり、プロジェクト自体には直接リンクされていません。
単純な.cmakeファイルを使用し、後でさまざまなプロジェクト間で再利用できます。このチュートリアルではcmake/gcc-arm-none-eabi.cmakeという名前を使用しています。以下はその例です。
set(CMAKE_SYSTEM_NAME Generic)set(CMAKE_SYSTEM_PROCESSOR arm)# 一部のデフォルトの GCC 設定# arm-none-eabi- はパスの一部である必要がありますenvironmentset(TOOLCHAIN_PREFIX arm-none-eabi-)set(FLAGS "-fdata-sections -ffunction-sections - -specs=nano.specs -Wl,--gc-sections")set(CPP_FLAGS "-fno-rtti -fno-Exceptions -fno-threadsafe-statics")# コンパイラ設定を定義set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc ${FLAGS})set(CMAKE_ASM_COMPILER) ${CMAKE_C_COMPILER})set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++ ${FLAGS} ${CPP_FLAGS})set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size)set(CMAKE_EXECUTABLE_SUFFIX_ASM) ".elf")set(CMAKE_EXECUTABLE_SUFFIX_C ".elf")set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf")set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)ルートプロジェクトディレクトリのcmake/フォルダーにファイルを作成します。
CMake ハイライター プラグインがインストールされている場合、VSCode は CMake コマンドを適切に強調表示します。
ツールチェーンのセットアップが完了しました。ファイルを自由に閉じて、次のステップに進むことができます。
メインのCMakeLists.txt (ルートCMake ファイルとも呼ばれます) を作成する必要があります。
正しい大文字と小文字を使用して、実際に
CMakeLists.txtという名前を付けていることを確認してください。
将来すべてのプロジェクトで再利用できる、シンプルなテンプレート ファイルを用意しました。プロジェクト名、ソースファイル、インクルードパスなどを変更するだけです。
cmake_minimum_required(VERSION 3.22)# コンパイラ設定のセットアップset(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS ON)set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR})message("ビルド タイプ: " ${CMAKE_BUILD_TYPE})## コア プロジェクト設定#project(your-project-name)enable_ language(C CXX ASM)## コア MCU フラグ、CPU、命令セットと FPU セットアップ# MCU に合わせて適切に設定する必要があります#set(CPU_PARAMETERS
-mthumb# 使用する MCU-mcpu=cortex-m7 に適切に設定するために注意が必要です
-mfpu=fpv5-d16
-mfloat-abi=ハード
)# リンカー スクリプトを設定しますset(linker_script_SRC ${PROJ_PATH}/path-to-linker-script.ld)set(EXECUTABLE ${CMAKE_PROJECT_NAME})## コンパイルするソース ファイルのリスト#set(sources_SRCS# ここにソース ファイルを 1 つ置きます各行に、CMakeLists.txt ファイルの場所を基準にして)## インクルード ディレクトリ#set(include_path_DIRS# ここにインクルードを入力しますdirs、各行に 1 つ、CMakeLists.txt ファイルの場所に相対)## シンボル定義#set(symbols_SYMB# シンボル (プリプロセッサ定義) を各行に 1 つずつ入力# 安全のために二重引用符でカプセル化します)# 実行可能ファイルadd_executable (${EXECUTABLE} ${sources_SRCS})# pathstart_include_directories を含めます(${EXECUTABLE} PRIVATE ${include_path_DIRS})# プロジェクト シンボルstarget_compile_settings(${EXECUTABLE} PRIVATE ${symbols_SYMB})# コンパイラ オプションstarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARAMETERS}-Wall
-ウィエクストラ
-Wpedantic
-Wno-unused-parameter# 完全なデバッグ構成 -Og -g3 -ggdb
)# リンカー オプションstarget_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map
--specs=nosys.specs
-u _printf_float # STDIO 浮動小数点フォーマットのサポート-Wl,--start-group
-lc
-lm
-lstdc++
-lsupc++
-Wl、--末端基
-Wl,--print-memory-usage
)# ポストビルドを実行して sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}> を出力します
)# 出力を 16 進数および binaryadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex に変換します
)# bin ファイルに変換 -> 条件チェックを追加します?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)ソース ファイルはSTM32CubeIDEプロジェクトと同じです。ソースが黄色で強調表示されている前の画像を確認できます。
シンボルとインクルード パスは、STM32CubeIDEのプロジェクト設定にあります。下の2の写真はデモプロジェクトの様子を示しています。
Cortex-Mxx のセットアップには、特に浮動小数点セットアップの場合、特別な注意が必要です。 STM32H735xxの場合は以下のように設定してください。
set(CPU_PARAMETERS
-mthumb
-mcpu=cortex-m7 # Cortex-M CPU を設定します-mfpu=fpv5-d16 # 浮動小数点を設定します type-mfloat-abi=hard # ハードウェア ABI モード)設定の一般的なルールは次の表の通りです
| STM32ファミリー | -mcpu | -mfpu | -mfloat-abi |
|---|---|---|---|
| STM32F0 | cortex-m0 | Not used | soft |
| STM32F1 | cortex-m3 | Not used | soft |
| STM32F2 | cortex-m3 | Not used | soft |
| STM32F3 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32F4 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32F7 SP | cortex-m7 | fpv5-sp-d16 | hard |
| STM32F7DP | cortex-m7 | fpv5-d16 | hard |
| STM32G0 | cortex-m0plus | Not used | soft |
| STM32C0 | cortex-m0plus | Not used | soft |
| STM32G4 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32H5 | cortex-m33 | fpv5-sp-d16 | hard |
| STM32H7 | cortex-m7 | fpv5-d16 | hard |
| STM32L0 | cortex-m0plus | Not used | soft |
| STM32L1 | cortex-m3 | Not used | soft |
| STM32L4 | cortex-m4 | fpv4-sp-d16 | hard |
| STM32L5 | cortex-m33 | fpv5-sp-d16 | hard |
| STM32U0 | cortex-m0plus | Not used | soft |
| STM32U5 | cortex-m33 | fpv5-sp-d16 | hard |
| STM32WB | cortex-m4 | fpv4-sp-d16 | hard |
| STM32WBA | cortex-m33 | fpv5-sp-d16 | hard |
| STM32WL CM4 | cortex-m4 | Not used | soft |
| STM32WL CM0 | cortex-m0plus | Not used | soft |
このテーブルには潜在的な間違いが含まれており、すべての行についてGCC コンパイラでテストされていません。
STM32F7の場合は、STM32F7xx 公式サイトにアクセスし、デバイスに単精度または倍精度 FPU が搭載されているかどうかを確認し、それに応じて設定を適用します。製品リストはすべてを網羅しているわけではありません。
ソース ファイル、インクルード パス、MCU コア設定および定義が設定された後の最終的なCMakeLists.txtファイル:
cmake_minimum_required(VERSION 3.22)# コンパイラ設定のセットアップset(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS ON)set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR})message("ビルド タイプ: " ${CMAKE_BUILD_TYPE})## コア プロジェクト設定#project(STM32H735G-DK-LED) # Modifiedenable_ language(C CXX ASM)## コア MCU フラグ、CPU 、命令セット、および FPU セットアップ# を適切に設定する必要があります。 MCU#set(CPU_PARAMETERS
-mthumb# これは、使用する MCU-mcpu=cortex-m7 # Modified-mfpu=fpv5-d16 # Modified-mfloat-abi=hard # Modified)# リンカー scriptset(linker_script_SRC ${PROJ_PATH}/STM32H735IGKX_FLASH) を設定するために注意が必要です。 ld) # Modifiedset(EXECUTABLE) ${CMAKE_PROJECT_NAME})## コンパイルするソース ファイルのリスト#set(sources_SRCS #変更済み${PROJ_PATH}/Core/Src/main.c${PROJ_PATH}/Core/Src/stm32h7xx_it.c${PROJ_PATH}/Core/Src/syscalls.c${PROJ_PATH}/Core/Src/sysmem.c$ { PROJ_PATH}/Core/Src/system_stm32h7xx.c${PROJ_PATH}/Core/Startup/startup_stm32h735igkx.s${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm3 2h7xx_ll_exti.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_gpio.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_l l_pwr.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_rcc.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_utils.c
)## インクルードディレクトリ#set(include_path_DIRS # Modified${PROJ_PATH}/Core/Inc${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Inc${PROJ_PATH}/Drivers/CMSIS/Device/ST/STM32H7xx/Include${PROJ_PATH}/ドライバー/CMSIS/インクルード
)## シンボル定義#set(symbols_SYMB # Modified"DEBUG""STM32H735xx""USE_FULL_LL_DRIVER""HSE_VALUE=25000000")# 実行可能ファイルadd_executable(${EXECUTABLE} ${sources_SRCS})# インクルード pathstarget_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS})# プロジェクト シンボルstarget_compile_settings(${EXECUTABLE} PRIVATE ${symbols_SYMB})# コンパイラ オプションstarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARAMETERS}-Wall
-ウィエクストラ
-Wpedantic
-Wno-unused-parameter# 完全なデバッグ構成 -Og -g3 -ggdb
)# リンカー オプションstarget_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map
--specs=nosys.specs
-u _printf_float # STDIO 浮動小数点フォーマットのサポート-Wl,--start-group
-lc
-lm
-lstdc++
-lsupc++
-Wl、--末端基
-Wl,--print-memory-usage
)# ポストビルドを実行して sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}> を出力します
)# 出力を 16 進数および binaryadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex に変換します
)# bin ファイルに変換 -> 条件チェックを追加します?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)VSCode で強調表示すると、次のようになります。
CMakePresets.json CMake 3.18以降で利用できる特殊なファイルで、Eclipse で知られるデバッグおよびリリース構成と同様のユーザー構成の定義を提供します。このファイルを使用すると、開発者はデバッグ モードとリリースモードの間、さらにはブートローダーとメイン アプリケーションの間でさえも迅速に切り替えることができます。これは組み込みアプリケーションの一般的な使用例です。
このチュートリアルでは、ファイルの詳細には焦点を当てません。むしろ、ここに提供されているテンプレート ファイルを示します。
ファイルには次の内容が説明されています。
各ビルド構成のビルド ディレクトリへのパス
各構成のデフォルトのビルド タイプ ( Debug 、 Release 、...)
.cmakeツールチェーン記述子へのパス
デフォルトのCMake構成ごとに
4プリセットがテンプレートで構成されています
{"バージョン": 3,"configurePresets": [
{"name": "default","hidden": true,"generator": "Ninja","binaryDir": "${sourceDir}/build/${presetName}","toolchainFile": "${sourceDir} /cmake/gcc-arm-none-eabi.cmake","cacheVariables": {"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"}
}、
{"name": "デバッグ","inherits": "default","cacheVariables": {"CMAKE_BUILD_TYPE": "デバッグ"}
}、
{"name": "RelWithDebInfo","inherits": "default","cacheVariables": {"CMAKE_BUILD_TYPE": "RelWithDebInfo"}
}、
{"name": "リリース","inherits": "default","cacheVariables": {"CMAKE_BUILD_TYPE": "リリース"}
}、
{"name": "MinSizeRel","inherits": "default","cacheVariables": {"CMAKE_BUILD_TYPE": "MinSizeRel"}
}
]
}常に最新のファイルが
templates/CMakePresets.jsonで利用可能です
プロジェクト情報を使用してCMake を構成したので、CMake コマンドを実行する準備が整いました。
VSCode には、CMake コマンドの優れたヘルパーであるCMake Toolsプラグインが付属しています。インストールすると、VSCode アクティブ ウィンドウの下部でいくつかのオプションが利用可能になります。
ご覧のとおり、構成プリセットが選択されていません。
そのような情報が表示されない場合は、
CTRl + ALT + Pを押してCMake: Quick Startコマンドを実行します。
次のステップは、現在のプリセットを選択することです。 「設定プリセットが選択されていません」をクリックして上部にウィンドウを開き、プリセットを選択します。このチュートリアルのためにデバッグを選択しました。
選択すると、テキストが選択したプリセット ラベルに変わります。
プリセットがアクティブになったので、 CMake-Tools拡張機能のおかげでユーザーがCMakeLists.txtファイルを変更するたびに、VSCode が自動的にビルド生成コマンドを呼び出して新しい変更を適用します。
私たちのプロジェクトは構築してリンクする準備ができています。 CMake ビルド生成ステップが失敗しない限り、ビルド ディレクトリでninja build system を呼び出す準備ができているはずです。
次のステップは、緑色の四角形で示されている「Build」ボタンを押すことです。 CMake は次のコマンドを実行します。
選択したプリセットに対してビルド ジェネレーターを実行する
実際にNinjaでコードをビルドしてみる
ビルドがうまくいった場合、出力の最後のステップは、さまざまなセクションでのメモリ使用量の出力です。
その結果、 build/<presetname>/ディレクトリに出力が得られました。
完全な実行可能情報を含むproject-name.elfファイル
project-name.hex HEX ファイル
project-name.bin BIN ファイル
project-name.mapマップファイル
デフォルト設定では、 .hexおよび.binファイルは生成されず、メモリ使用量も表示されません。準備されたCMakeLists.txtファイルには、ビルドが成功した後に追加のコマンドを実行するためのPOST_BUILDオプションが含まれています。コードはすでにCMakeLists.txtファイルに含まれているため、何もする必要はなく、ただ観察するだけです。
コマンドを実行して次のことを行います。
各領域の使用サイズ + 最終的な実行可能メモリ消費量を出力します。
実行可能ファイルから.hexファイルを生成
実行可能ファイルから.binファイルを生成
# ポストビルドを実行して印刷 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}>
)# 出力を 16 進数および binaryadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hex に変換します
)# bin ファイルに変換 -> 条件チェックを追加します?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.bin
)
.binファイルの生成を無効にするには、.binのPOST_BUILD行を削除し、CMake ビルド システム コマンドを再生成します。メモリが内部フラッシュ メモリと外部フラッシュ メモリに分割されている場合、.binファイルの生成は悪影響を与える可能性があります。未使用のゼロが多数含まれた非常に大きなファイル (>= 2GB) が生成される場合があります。
プロジェクト開発中に覚えておくと便利なコマンドのリストがあります。
ビルドの変更
クリーンプロジェクト
最初にクリーンを使用してプロジェクトを再構築します
フラッシュプロジェクト
完全な構文は忘れがちですが、すぐに実行できるように、コマンド リストを含む.vscode/tasks.jsonファイルを作成しましょう。
{ "バージョン": "2.0.0"、"タスク": [
{"type": "cppbuild","label": "プロジェクトのビルド","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- j", "8"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"グループ": {"種類": "ビルド","isDefault": true}
}、
{"type": "shell","label": "プロジェクトを再ビルド","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "--clean-first"、"-v"、"-j"、"8"]、"オプション": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],
}、
{"type": "shell","label": "プロジェクトをクリーン","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- -target", "clean"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": []
}、
{"type": "shell","label": "CubeProg: Flash プロジェクト (SWD)","command": "STM32_Programmer_CLI","args": ["--connect","port=swd","- -download", "${command:cmake.launchTargetPath}","-hardRst"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": []
}、
{"type": "shell","label": "CubeProg: シリアル番号が定義された Flash プロジェクト (SWD) - 最初にシリアル番号を設定する必要があります",