OpenOCDでは、 Semihosting なるものをサポートしているとのこと。
これにより、デバッグの選択の余地が増えることを意味し、開発期間をより短くできる可能性を秘めていると思います。
Arduinoを使っていた場合はそのようなものはなく、
- USARTを使用して出力する
- SDカードにログとして保存する
- LCDなどに表示する
といったことをする必要があり、いずれも回路を追加する必要がありました。これはちょっと面倒です。1.はもっとも有力な選択肢になると思いますが他にUSARTを使用する場合はソフトウェアシリアルを追加で入れる必要がありました。2.と3.もできればしたくないです。
ともあれ、過去に構築方法を説明した SWSW4STM32 System Workbench for STM32 の環境でもSemihostingが使用できるので、活用しましょう。
Eclipseの設定
プロジェクトの設定
Project >> Properties を選択します。
左側のツリーは C/C++ Build >> Settings* を選択します。右側は Tool Settings タブを選択します。その下に表示されるツリーは MCU GCC Linker を選択します。 Linker flags に ** –specs=rdimon.specs -lrdimon** を追加します。
ソースの修正
Semihostingではprintf() などが使用できますが、その前に initialise_monitor_handles() を呼び出す必要があります。main() の先頭に記述しましょう。試しに、続けてprintf()を記述してみます。
/* USER CODE BEGIN 0 */ extern void initialise_monitor_handles(void); /* USER CODE END 0 */ : int main(void) { /* USER CODE BEGIN 1 */ initialise_monitor_handles(); printf("hello world\n"); /* USER CODE END 1 */ :
そうそう、試した限りでは、改行コード \n を記述しなければEclipseの Console タブに表示されませんでした。
あと、WEBページによっては -nostartfiles を削除する手順を紹介しているところもありましたが、特に実施しなくても文字列の出力ができました。もっとも誤った手順なのかもしれませんが…
ここまでできたら、ビルドします。
デバッグ時のオプション
Run >> Debug Configurations… を選択し、デバッグで使用している設定を選択します。
Commands タブを選択し、 ‘Initialize’ commands に以下の1行を追加します。
monitor arm semihosting enable
実行
Debug ボタンを押下してみましょう。以下のように Console タブ上に以下のようなログが出力され、printf()で記述した内容も出力されると思います。
Open On-Chip Debugger 0.9.0 (2015-05-28-12:05) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : FTDI SWD mode enabled adapter speed: 300 kHz adapter_nsrst_delay: 100 none separate cortex_m reset_config sysresetreq Info : clock speed 300 kHz Info : SWD IDCODE 0x0bc11477 Info : stm32l0.cpu: hardware has 4 breakpoints, 2 watchpoints Info : accepting 'gdb' connection on tcp/3333 Info : STM32L flash size is 64kb, base address is 0x8000000 adapter speed: 300 kHz target state: halted target halted due to debug-request, current mode: Thread xPSR: 0xf1000000 pc: 0x080005a0 msp: 0x20002000, semihosting STM32L0: Enabling HSI16 adapter speed: 2500 kHz Error: stm32l0.cpu -- clearing lockup after double fault Warn : couldn't use loader, falling back to page memory writes adapter speed: 300 kHz target state: halted target halted due to debug-request, current mode: Thread xPSR: 0xf1000000 pc: 0x080005a0 msp: 0x20002000, semihosting semihosting is enabled hello world.
これで、よりお手軽にデバッグできます (^^)