OpenOCD小ネタ25 -STM32F746G-Discoveryでステップ実行が上手くできない件-

令和明けましておめでとうございます。
今年は明けましておめでとうが2回もあった年なわけですが新元号明けたとたんに
景気が悪くなりだしてヤッパつれぇわ
…ってダジャレ言いたかっただけです。




さてOpenOCDも地味に着々と更新が加わっておりますが4月頭にCortex-M7初期
リビジョンでデバッグのステップ実行時に強制的に割り込みでブレークがかかる
という難儀なエラッタ
に対する回避策が講じられた模様でねむいさんもさっそく
試してみることにしました。

STM32F746G-Discvoeryがそのエラッタ持ちのシリコンのSTM32F7の品種なので
これで実験してみます。


無対策の場合では私のプログラムの場合、ステップ実行で最初のprintf関数まで
実行したら強制的にUARTのIRQに飛んで行ってしまいます。これが上記のバグ
の具体的な影響となります。現在のOpenOCDではこれに対して強制的にブレークが
掛からないようにする回避策の修正を加えられています。はずです!


回避策の使い方はopenocdの起動時のコマンド引数若しくは起動時に読み込むcfg
ファイルに"cortex_m maskisr steponly"を沿えるだけとなっております。
しかし、cortex_mコマンドはSTLink等のHLAでは使用不可能な固有コマンドです…
STM32F746G-DiscvoeryはSTLink/V2一体型…orz


そんなわけで改造してみます。SWDがつながっているジャンパ抵抗を外し外に引きだ
しができるようにします。
今回使用する外部のデバッガアダプタはJ-Linkに化かしたLPC-Link2です。


それでは開始…!

ぁれ…またUARTのIRQで止まってる…orz

いろいろ調べましたがstepi(=アセンブラの1命令単位のステップ実行)は問題ない
ようでしたが、C言語ソースレベルのやつ(=step)が駄目orz



というわけで私のいつものでSTM32F746G-Discoveryを使う際はUARTを割り込み
なしのポーリングの設定(uart_support.h参照)に替えてデバッグしていただきたく
思います…!

Go to top of page