二流エンジニアの逆襲

二流エンジニアが一流エンジニアになるまでの記録である

vscode で nucleo-F401RE のデバッグ環境を構築

経緯

nucleo 用にビルド環境を docker で構築したが、 現状、docker for windows は USBデバイスに対応していないため、コンテナ内ではデバッグができない。 そこで、泣く泣くホスト側にも開発環境を用意し、デバッグ環境を構築することにした。

vscodeデバッグ機能を使用して構築する

公式サイトのチュートリアルをもとに環境を構築。

os.mbed.com

以下をインストール。

  • GNU Tools for Arm Embedded Proccessors 9-2019-q4-major 2019
  • Git 2.26.1
  • TortoiseHg 5.0.2
  • GnuWin32 Make-3.81
  • Python 3.8.2

vscode 用にmbed-cli プロジェクトをインポートし、make する。

# mbed import http://os.mbed.com/teams/ST/code/mbed-os-example-blinky/
# cd mbed-os-example-blinky
# mbed export -i vscode_gcc_arm -m NUCLEO_F401RE --profile debug
# make

ここで make に失敗(No such file on directory)して詰まったが、PCを再起動するとすんなり make できた。

後は、先ほど export したときに生成されている launch.json を環境に合わせていじる。

            "debugServerArgs": "-f \"C:\\Program Files (x86)\\OpenOCD-20200408-0.10.0\\share\\openocd\\scripts\\board\\st_nucleo_f4.cfg\" -f \"C:\\Program Files (x86)\\OpenOCD-20200408-0.10.0\\share\\openocd\\scripts\\interface\\stlink-v2-1.cfg\" -c init -c \"reset init\"",
            "serverStarted": "target halted due to debug-request, current mode: Thread",
                "MIDebuggerPath": "C:\\Program Files (x86)\\GNU Tools ARM Embedded\\9 2019-q4-major\\bin\\arm-none-eabi-gdb.exe",
                "debugServerPath": "C:\\Program Files (x86)\\OpenOCD-20200408-0.10.0\\bin\\openocd.exe",

vscodeデバッグ画面から ”C++ Launch” を押下し、デバッグを開始する。 make が走り、flash writeが始まる。 しかし、flash write が終わっても、target board が reset せず、デバッグを開始できない。 苦肉の策で board 上の reset ボタンを押下すると、main.cpp に張った break point で止まった!

f:id:polonity:20200416111743p:plain

できた。

結構 elf ファイルの転送に時間がかかるが、breakpoint を張れるようになってデバッグが必要になっても心強い。


[追記]

visual studio code拡張機能として、Platform IO がある。 これを使えば、割と簡単にデバッグ環境を構築できた。(少なくとも、デバッグ設定ファイルをいじる手間は省ける。) また、ターゲットが(いまのところ)確実に reset するので、使いやすい。 こっちのほうがおすすめですね。