STM32/セミホスティングを使ってみる


OpenOCDでは、 Semihosting なるものをサポートしているとのこと。

ARM Information Center

これにより、デバッグの選択の余地が増えることを意味し、開発期間をより短くできる可能性を秘めていると思います。

Arduinoを使っていた場合はそのようなものはなく、

  1. USARTを使用して出力する
  2. SDカードにログとして保存する
  3. LCDなどに表示する

といったことをする必要があり、いずれも回路を追加する必要がありました。これはちょっと面倒です。1.はもっとも有力な選択肢になると思いますが他にUSARTを使用する場合はソフトウェアシリアルを追加で入れる必要がありました。2.と3.もできればしたくないです。

ともあれ、過去に構築方法を説明した SWSW4STM32 System Workbench for STM32 の環境でもSemihostingが使用できるので、活用しましょう。

Eclipseの設定

プロジェクトの設定

Project >> Properties を選択します。

Settings

左側のツリーは C/C++ Build >> Settings* を選択します。右側は Tool Settings タブを選択します。その下に表示されるツリーは MCU GCC Linker を選択します。 Linker flags に ** –specs=rdimon.specs -lrdimon** を追加します。

ソースの修正

Semihostingではprintf() などが使用できますが、その前に initialise_monitor_handles() を呼び出す必要があります。main() の先頭に記述しましょう。試しに、続けてprintf()を記述してみます。

そうそう、試した限りでは、改行コード \n を記述しなければEclipseの Console タブに表示されませんでした。

あと、WEBページによっては -nostartfiles を削除する手順を紹介しているところもありましたが、特に実施しなくても文字列の出力ができました。もっとも誤った手順なのかもしれませんが…

ここまでできたら、ビルドします。

デバッグ時のオプション

Run >> Debug Configurations… を選択し、デバッグで使用している設定を選択します。

Commands Tab

Commands タブを選択し、 ‘Initialize’ commands に以下の1行を追加します。

実行

Debug ボタンを押下してみましょう。以下のように Console タブ上に以下のようなログが出力され、printf()で記述した内容も出力されると思います。

これで、よりお手軽にデバッグできます (^^)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください