この記事はmbed Advent Calendar 2015の9日目の記事です.
お久しぶりです. 今回の紹介するPyOCDは,mbedのプログラミングやデバッグに使えるPythonのライブラリです. 昨年のmbedアドベントカレンダーではmbedをデバッグするために使用していました.
tnishinaga.hatenablog.com tnishinaga.hatenablog.com
このPyOCDとgccを用いたmbedオフラインコンパイル環境を組み合わせると無料でmbedのデバッグができます. アセンブリをゴリゴリ書いてmbedのプログラミングをしている私にとってデバッガは必須なので,とても嬉しいです.
先週くらいにPyOCDをインストールし直そうとgithubのページを参照したところ,インストール方法からgdbサーバーの建て方等色々便利に変わっていたので,幾つか便利なコマンドの使い方を紹介します.
環境
OS | ArchLinux |
pyOCD version | 0.6.1 |
使用したmbedボード | FRDM-KL25Z |
PyOCDの使い方
対応mbedボード
PyOCDが対応しているmbedボードと,そうでないボードがあります.
コードを読む限りでは,以下のボードに対応しているようです.
対応ボード | |
---|---|
FRDM-KL25Z | NXP LPC800-MAX |
FRDM-KL05Z | nRF51822-mKIT |
FRDM-KL46z | Arch BLE |
FRDM-K20D50M | Seeed Tiny BLE |
FRDM-K22F | DT01 + MB2001 |
FRDM-K64F | DT01 + MB00xx |
FRDM-KL02Z | Bambino 210 |
FRDM-KL26Z | Bambino 210E |
FRDM-KL28Z | maxwsnenv |
mbed NXP LPC1768 | max32600mbed |
Arch Pro | nRF51-DK |
mbed NXP LPC11U24 | WIZwik_W7500 |
PyOCDのインストール
以前はgithubからコードを取ってきてビルドしていましたが,現在はpipからインストールできるようになってました.
$ sudo pip2 install pyocd
プログラムの書き込み
pyocd-flashtool というコマンドはmbedのプログラムを書き込むことができます.
使い方は pyocd-flashtool の後ろにmbedのオンラインコンパイラでコンパイルした時に降ってくるbinファイルを指定するだけです.
$ sudo pyocd-flashtool hoge.bin
実行ログはこんな感じです.
$ sudo pyocd-flashtool hoge.bin INFO:root:new board id detected: 0200020318CE2E18E532D3E0 INFO:root:board allows 5 concurrent packets INFO:root:DAP SWD MODE initialised INFO:root:IDCODE: 0xBC11477 INFO:root:KL25Z not in secure state INFO:root:2 hardware breakpoints, 0 literal comparators INFO:root:CPU core is Cortex-M0+ INFO:root:2 hardware watchpoints [====================] 100%
複数のmbedがつながっている場合はTARGETオプションをいじるひつようがありそうですが,試したことがないのでわかりません.
gdbサーバーを立てる
gdbサーバーを立てるのはpyocd-gdbserverというコマンドを叩くだけになっていました.
コマンドと実行ログは以下.
$ sudo pyocd-gdbserver INFO:root:new board id detected: 0200020318CE2E18E532D3E0 INFO:root:board allows 5 concurrent packets INFO:root:DAP SWD MODE initialised INFO:root:IDCODE: 0xBC11477 INFO:root:KL25Z not in secure state INFO:root:2 hardware breakpoints, 0 literal comparators INFO:root:CPU core is Cortex-M0+ INFO:root:2 hardware watchpoints INFO:root:Telnet: server started on port 4444 INFO:root:GDB server started at port:3333
後はgdbからリモート接続すればデバッグができます. 例えば,hogeというプログラムのfuga関数の実行を見たいときは以下のように行います *1.
$ arm-none-eabi-gdb hoge.elf (gdb) target remote :3333 (gdb) load (gdb) break fuga (gdb) c
後はstepコマンド等でステップ実行して見ていきます. 詳しくは去年の記事を参照してください.
pyocd-tool
$ pyocd-tool --help usage: pyocd-tool [-h] [--version] [-H] [-k KHZ] [-b ID] [-t TARGET] [-d LEVEL] [cmd] [args [args ...]] Target inspection utility positional arguments: cmd Command args Arguments for the command. optional arguments: -h, --help show this help message and exit --version show program's version number and exit -H, --halt Halt core upon connect. -k KHZ, --clock KHZ Set SWD speed in kHz. (Default 1 MHz.) -b ID, --board ID Use the specified board. -t TARGET, --target TARGET Override target. -d LEVEL, --debug LEVEL Set the level of system logging output. Supported choices are: debug, info, warning, critical, error Available commands: clock, d, disasm, erase, exit, g, go, h, halt, i, info, list, log, map, quit, r, r16, r32, read, read16, read32, read8, reg, reset, s, stat, status, step, unlock, w, w16, w32, wreg, write, write16, write32, write8
マイコンのレジスタやメモリを読み書きしたりできるようですが,使いみちがよくわかっていません...すみません...
次の人
つぎはkb10uyさんです.
よろしくお願いします.