今日の仕事で話題になったことについて記録。
会社では横河デジタルのAdviceProを使用している。
デバッガツールはmicroViewPlusだ。
ICEデバッグを行う際、JTAGでARMと接続しプログラムのデバッグを行うわけだが、
その際にブレークに使用する
「OCDブレーク」とか
「ソフトウェアブレーク」とは
なんなのだ?
という話題になった。
そのとき、私が「OCDってのはOff Chip Driverのことで・・・」とかウソ言っちゃってごめんなさい。
恐らく正しくは
『OCD -> On Chip Debug』
で良いのではないかと思います。
ICEを接続する先CPUに存在するブレーク用のハードウェア資源を使用してブレークする機構と思われます。
「FT」でブレークしたい場合はプログラムカウンタを監視し、
該当のインストラクションのプログラムカウンタに到達した際にブレークさせるのだと思います。
だからきっとARM9では1個しか貼れず、ARM11だと5,6個?貼れるではないかと。
ちなみにソフトウェアブレークはブレークしたいコード(インストラクション)にソフト的に
割り込みを掛けてブレークするようです。
ICEでブレークさせるためのプログラムをターゲットシステムのメモリに書き出しておき、
ブレークポイントに来たらそのプログラムにブランチし、
そのプログラムがブレークに関わる処理を行うのだと思います。
メリットですがソフトウェア的なブレークのため資源てのはターゲットシステムのメモリに依存するのかな?
少なくともOCDよりは多くのポイントでブレークすることができる。
デメリットはソフト的に割り込みコードを埋め込むので、
プログラム領域が死住む起動時にRAMに展開されるタイプの場合、
再起動のたびにブレークポイントを貼りなおさなければならないということでしょうか。
ウソ書いたかもしれません。
真実はキミの心の中にある(笑)