【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
EclipseでSTMマイコンのデバッグをやってみたい。
ひとりごと
Eclipse・CDT・OpenOCD・GDB server…と、いろいろややこしいです。
英語ページだと結局面倒になってやらなくなるため
日本語で紹介しているページを探したところ、
How to install GNU MCU Eclipse?を日本語で説明している
WindowsでEclipse+CDTにGNU MCU Eclipseプラグインを入れて環境構築を発見。
探していたのはコレです。
インストール(概要)
この順番でインストールします。
①Node.js (npm)
②xPack package manager (xpm)
③ARM Toolchain (RISC-V Toolchain)
④Windows Build Tools
⑤OpenOCD
⑥QEMU
⑦Eclipse & CDT
※すでにEclipse・CDTを持ってる人は
GNU MCU Eclipse プラグインを入れればよいみたいです。
インストール(詳細)
①Node.js (npm)
この記事を見てNode.jsをインストールします。
【初心者向け】Node.jsのインストールと簡易Webサーバの実験
②xPack package manager (xpm)
npmコマンドでxpmをインストール。
> npm install –global xpm
こんなメッセージが出ます。
C:\Users\pavement1234\AppData\Roaming\npm\xpm -> C:\Users\pavement1234\AppData\Roaming\npm\node_modules\xpm\bin\xpm.js
+ xpm@0.5.0
added 262 packages from 147 contributors in 28.261s
③ARM Toolchain (RISC-V Toolchain)
xpmコマンドでARM toolchainをインストール。
> xpm install –global @gnu-mcu-eclipse/arm-none-eabi-gcc
こんなメッセージが出ます。
xPack manager – install package(s)
Processing @gnu-mcu-eclipse/arm-none-eabi-gcc@8.2.1-1.4.1…
Installing globally in ‘C:\Users\pavement1234\AppData\Roaming\xPacks\@gnu-mcu-eclipse\arm-none-eabi-gcc\8.2.1-1.4.1’…
Downloading https://github.com/gnu-mcu-eclipse/arm-none-eabi-gcc/releases/download/v8.2.1-1.4/gnu-mcu-eclipse-arm-none-eabi-gcc-8.2.1-1.4-20190214-0604-win64.zip…
3208 files extracted.
‘xpm install’ completed in 115.879 sec.
※RISC-VをインストールするのでもOKみたい。
> xpm install –global @gnu-mcu-eclipse/riscv-none-gcc
④Windows Build Tools
xpmコマンドでビルドツール(makeとか)をインストール。
xpm install –global @gnu-mcu-eclipse/windows-build-tools
こんなメッセージが出ます。
xPack manager – install package(s)
Processing @gnu-mcu-eclipse/windows-build-tools@2.11.1-1…
Installing globally in ‘C:\Users\pavement1234\AppData\Roaming\xPacks\@gnu-mcu-eclipse\windows-build-tools\2.11.1-1’…
Downloading https://github.com/gnu-mcu-eclipse/windows-build-tools/releases/download/v2.11-20180428/gnu-mcu-eclipse-build-tools-2.11-20180428-1604-win64.zip…
Extracting ‘gnu-mcu-eclipse-build-tools-2.11-20180428-1604-win64.zip’…
42 files extracted.
‘xpm install’ completed in 8.623 sec.
⑤OpenOCD
xpmコマンドでOpenOCDをインストール。
xpm install –global @gnu-mcu-eclipse/openocd
こんなメッセージが出ます。
xPack manager – install package(s)
Processing @gnu-mcu-eclipse/openocd@0.10.0-11.1…
Installing globally in ‘C:\Users\pavement1234\AppData\Roaming\xPacks\@gnu-mcu-eclipse\openocd\0.10.0-11.1’…
Downloading https://github.com/gnu-mcu-eclipse/openocd/releases/download/v0.10.0-11-20190118/gnu-mcu-eclipse-openocd-0.10.0-11-20190118-1134-win64.zip…
Extracting ‘gnu-mcu-eclipse-openocd-0.10.0-11-20190118-1134-win64.zip’…
828 files extracted.
‘xpm install’ completed in 10.822 sec.
⑥QEMU
xpmコマンドでQEMUをインストール。
xpm install –global @gnu-mcu-eclipse/qemu
こんなメッセージが出ます。
xPack manager – install package(s)
Processing @gnu-mcu-eclipse/qemu@2.8.0-4.1…
Installing globally in ‘C:\Users\pavement1234\AppData\Roaming\xPacks\@gnu-mcu-eclipse\qemu\2.8.0-4.1’…
Downloading https://github.com/gnu-mcu-eclipse/qemu/releases/download/v2.8.0-4-20190211/gnu-mcu-eclipse-qemu-2.8.0-4-20190211-0633-win64.zip…
Extracting ‘gnu-mcu-eclipse-qemu-2.8.0-4-20190211-0633-win64.zip’…
164 files extracted.
‘xpm install’ completed in 15.989 sec.
⑦Eclipse & CDT
GNU MCU Eclipseからダウンロード
(公式ページからもダウンロードできますが、
プラグインを自分で足せる人向けみたいです)。
ZIP展開して、eclipseフォルダをCドライブ直下に置きました。
eclipse.exeを実行したら
Java was started but returned exit coce=13というエラーが発生。
どうもJDKとJREのバージョンが合ってないようです。
JREとJDKをインストール後、
再びeclipse.exeを実行したところ無事に起動しました
カッコいい。
ワークスペースのディレクトリを選択。
起動画面。
J-Linkを挿してみる
J-Link eduを数年前に購入し眠らせてたので
USB接続してみたところ、認識しました。
STM32ボードはあるのですが、
J-Linkがささりません(20ピンJTAGポートではない)ので
今回J-Linkの出番は無さそうです。
xpmで各種プラグインがどこにインストールされたのか?
こんな感じになってました。
パスさえ分かればなんとかなりそうです。
C:\Users\<Windowsログインユーザ名>\AppData\Roaming\xPacks\@gnu-mcu-eclipse
├─arm-none-eabi-gcc
├─openocd
├─qemu
└─windows-build-tools
早速デバッグ
以前構築したPleiadesの環境とnpm、xpmの環境を比較します。
【Eclipse】無料で使える統合開発環境のインストール方法(Pleiades All In One)
基板はSTMを使いました。
【マイコン】STM32F446 Nucleo-64を動かした
これがPleiadesの設定。
次にnpm、xpmで作った環境。
こっちのが設定箇所が多いです。
実行時のログはこんな感じです
(Pleiadesの記事にログの記載はしていませんが、だいたい同じでした)。
GNU MCU Eclipse 64-bit Open On-Chip Debugger 0.10.0+dev-00462-gdd1d90111 (2019-01-18-11:42)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Started by GNU MCU Eclipse
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 2000 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK V2J32M22 (API v2) VID:PID 0483:374B
Info : Target voltage: 3.271579
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : Listening on port 3333 for gdb connections
Info : accepting ‘gdb’ connection on tcp/3333
Info : device id = 0x10006421
Info : flash size = 512kbytes
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
adapter speed: 1800 kHz
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080002f4 msp: 0x20020000
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
adapter speed: 4000 kHz
semihosting is enabled
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
adapter speed: 1800 kHz
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080002f4 msp: 0x20020000, semihosting
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
Info : Unable to match requested speed 8000 kHz, using 4000 kHz
adapter speed: 4000 kHz
Info : Padding image section 0 at 0x0800044c with 4 bytes
Info : Padding image section 1 at 0x0800212f with 1 bytes
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x20000044 msp: 0x20020000, semihosting
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
adapter speed: 1800 kHz
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080002f4 msp: 0x20020000, semihosting
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
adapter speed: 1800 kHz
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080002f4 msp: 0x20020000, semihosting
===== arm v7m registers
(0) r0 (/32): 0x00000000
(1) r1 (/32): 0x00000000
(2) r2 (/32): 0x00000000
(3) r3 (/32): 0x00000000
(4) r4 (/32): 0x00000000
(5) r5 (/32): 0x00000000
(6) r6 (/32): 0x00000000
(7) r7 (/32): 0x00000000
(8) r8 (/32): 0x00000000
(9) r9 (/32): 0x00000000
(10) r10 (/32): 0x00000000
(11) r11 (/32): 0x00000000
(12) r12 (/32): 0x00000000
(13) sp (/32): 0x20020000
(14) lr (/32): 0xFFFFFFFF
(15) pc (/32): 0x080002F4
(16) xPSR (/32): 0x01000000
(17) msp (/32): 0x20020000
(18) psp (/32): 0x00000000
(19) primask (/1): 0x00
(20) basepri (/8): 0x00
(21) faultmask (/1): 0x00
(22) control (/2): 0x00
(23) d0 (/64): 0x0000000000000000
(24) d1 (/64): 0x0000000000000000
(25) d2 (/64): 0x0000000000000000
(26) d3 (/64): 0x0000000000000000
(27) d4 (/64): 0x0000000000000000
(28) d5 (/64): 0x0000000000000000
(29) d6 (/64): 0x0000000000000000
(30) d7 (/64): 0x0000000000000000
(31) d8 (/64): 0x0000000000000000
(32) d9 (/64): 0x0000000000000000
(33) d10 (/64): 0x0000000000000000
(34) d11 (/64): 0x0000000000000000
(35) d12 (/64): 0x0000000000000000
(36) d13 (/64): 0x0000000000000000
(37) d14 (/64): 0x0000000000000000
(38) d15 (/64): 0x0000000000000000
(39) fpscr (/32): 0x00000000
===== Cortex-M DWT registers
Hello ARM World!
System clock: 168000000 Hz
Second 1
Second 2
Second 3
Second 4
Second 5
Second 6
Second 7
Info : dropped ‘gdb’ connection
「実行」してみる
これがPleiades。
これがnpm、xpmで作った環境。
Pleiadesとほぼ一緒です。
ログはこんな感じ。
これも大体一緒です。
GNU MCU Eclipse 64-bit Open On-Chip Debugger 0.10.0+dev-00462-gdd1d90111 (2019-01-18-11:42)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 2000 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK V2J32M22 (API v2) VID:PID 0483:374B
Info : Target voltage: 3.274737
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : Listening on port 3333 for gdb connections
まとめ
とりあえずSTMマイコンをOpenOCD+gdbでデバッグするのは分かった感じです。
関連記事(マイコン)
【MCUXpresso】NXP製マイコンの開発環境(LPCXpresso1104編)
【マイコン】NXP(Kinetis)のマイコン評価ボードFRDM-KL25Zの使い方
【マイコン】Eclipseをnpm、xgmでインストールしてみた
【マイコン】STM32F446 Nucleo-64を動かした
【マイコン】C-FIRSTを試してみた