nRF51系というか、Cortex-M0系というか、ARMv6-MアーキテクチャにはDHCSRというレジスタがあることを知った。
ねむいさんのぶろぐ | Discovery系基板を中心とした小ネタいろいろ
世の中知らないことばかりですな。
PDFはこちらで、C1.6.3(p.331)から説明がある。
ARMv6-M Architecture Reference Manual - DDI0419C_arm_architecture_v6m_reference_manual.pdf
0x07は、(C_STEP | C_HALT | C_DEBUGEN)にビットを立てたことになる。
- C_DEBUGENを1にすると、このレジスタの内容が意味を持つ。
- C_HALTを1にすると、Debugステートを維持する(C_STEP, C_MASKINTSはN/A)。
- C_STEPを1にすると、Debugステートを抜けて次の命令を実行し、HALTする。
ということからすると、Debugステートを維持したいのであれば0x05でよいようだ。
しかし、「Debugステートを維持」と「次の命令を実行してHALT」の違いは何だろう?
HALTすると、何か例外が発生するまで次に進めない
そもそも、Debugステートってのは何だろうか。
いつも「JTAGデバッガを使うとブレークポイントに止まってくれて助かる」くらいにしか思っていないが、なんか曖昧なことしか知らないのだった。
ARMv6-Mでデバッグ機能が使用できる場合、以下のようなことができる。
- プロセッサのHALT
- シングルステップ
- プロセッサのコアレジスタへのアクセス
- ResetおよびHardFaultベクタキャッチ
- 無制限のソフトウェアブレークポイント
- システムメモリへの完全なアクセス
また、デバッグオプションには以下が含まれることがあるとのこと。
- ハードウェアブレークポイント(1~4)
- ウォッチポイント(1~2)
うーん、これはCorTex-M0のマニュアルを読んで書き写しているだけなのだが、それだけでも難解だ。
「より根源をたどれ!」という私と、「どうせそこまで理解してもデバッガでできる以上のことはやらんだろう」という私がせめぎ合っている。
とりあえず今回は「デバッグは奥が深い」という底の浅い言葉で終わろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。