OpenOCDにスクリプトを追加
- "C:\stm32\openocd\scripts\"に、"openocd_myfunc.cfg"という名前で以下の内容のファイルをメモ帳などで作成。
proc halt_mpu { } {
init
reset halt
}
- Eclipseでデバッグ時、この関数をOpenOCD起動コマンドで呼び出さないと、正常にデバッグ操作ができない。
EclipseからOpenOCDを起動できるようにする
- Eclipseのメニューバーで[Run]-[External Tools]-[External Tools Configurations]を選択。
(あいは、メニューバーで、ExtarnalToolsボタン(再生マークの右下にバッグが描いてあるボタン)の下向きの三角をクリック、[External Tools Configurations]をクリック。)
- 左メニューのなにもないところを右クリック。出てきたコンでキスとメニューで[New]を選択。
- "Name"テキストボックスに"OpenOCD"と入力。
- "Arguments"に下記の文をコピー。
STM32VLD |
-s C:/stm32/openocd/scripts -f board/stm32vldiscovery.cfg -f openocd_myfunc.cfg -c halt_mpu |
STM32LD |
|
STM32F4D |
|
- "Common"タブの"Display in favorites menu"で"External Tools"にチェックを入れる。
- "Apply"ボタンを押し設定を適用、"Close"ボタンでウィンドウを閉じる。
EclipseからOpenOCDを起動できるか確認
- メニューバーの[Run]-[External Tools]-[OpenOCD]を選択。
- ウィンドウ下の"Console"ビューに下画像のようなメッセージが出力され、ST-LinkのCOMランプが点滅していれば、正常に起動できている。
- "Console"ビューの"Tarminate"ボタン(四角の停止ボタン)を押し、OpenOCDを終了する。
EclipseからOpenOCDでデバッグできるようにする
- Eclipseのメニューバーで[Run]-[Debug Configurations]を選択。
- 左のメニューで"Zylin Embedded debug (Native)"を右クリック。
- 出てくるコンテキストメニューで、"New"を選択。
- "Debugger"タブを選択。
- "GDB debugger"テキストボックスに"arm-elf-gdb"と入力。
- 下にある"Verbose console mode"にチェックを入れる。
- "Apply"ボタンを押して設定を反映する。
- "Commands"タブを選択。
- "'Initialize' commands"テキストボックスに下記の文を入力。
target remote localhost:3333
load
monitor soft_reset_halt
break main
- "'Run' commands"テキストボックスに以下の文を入力。
- "Apply"ボタンを押して設定を反映する。
- "Common"タブの"Display in favorites menu"で"Debug"にチェックを入れる。
- "Apply"ボタンを押して設定を反映し、"Close"ボタンでウィンドウを閉じる。
EclipseからOpenOCDでデバッグできるか確認
- ツールーバーの"Debug"ボタンにある下向き三角を押し、"プロジェクト名 Debug"(説明通り操作しているなら、"blink_led Debug"となっている。)を選択し、デバッグを開始。
自動でプログラムがマイコンに書き込まれ、main関数でストップ(ブレイク)するようコマンドが送信される。
- 初回はパースペクティブを切り替えるか確認するウィンドウが表示されるが、"OK"を選択。
- ソースコードが表示され、main関数のはじめの命令で止まっていることを確認する。
(説明通り操作しているなら、"RCC_APB2PeriphClockCmd(RCC_APB2P..."という行で止まっているはず。)
- ツールバーの"Step Over"を押すことで、1行ずつ実行されていけば、正常にデバッグできている。
(ショートカットキーとしてF6キーでもできる。)
デバッグの手順
- マイコンボードをUSBケーブルでパソコンに接続する。
- プロジェクトをビルドする。
- ツールバーの[External Tools]-[OpenOCD]を選択し、OpenOCDを起動。
- ツールバーの[Debug]-[プロジェクト名 Debug]を選択し、デバッグを開始。自動でmain関数で停止する。(同時にパースペクティブがDebug用に切り替わる。)
- 以下の操作でデバッグを進め、バグを見つける。
- 止めたい行の右端をダブルクリックすことで、ブレークポイントを設定できる。
- ツールバーの"Resume"ボタンでプログラムをスタート。ブレークポイントがある行まで実行される。
- ツールバーの"Step Into(F5)"で、1行ずつ実行。(関数内にも入る。)
- ツールバーの"Step Over(F6)"で、1行ずつ実行。(関数内に入らない。)
- ツールバーの"Step Return(F7)"で、関数の外に出る。
- ソースコードの変数名にマウスポインタを置くことで、変数の内容を見ることができる。
- その他の詳しい操作法は、マイコン徹底入門-12.2.3.4. Debugパースペクティブの見方から順に見ていくと、わかると思います。
- STM32マイコンのプログラム書き換え回数は、1万回(保証値)なので、実質書き込み回数を気にせずデバッグできると思います。
最終更新:2013年06月26日 22:17