« March 2009 | Main | May 2009 »

2009.04.28

三次元限定でデバッガを語ろう

タイトルは釣り><

Debug hacks conferenceにもいけず、Debug hacks自体も入手出来ず、流れは読んでませんがそれはデバッガ関係無いですよねに反応。

僕にとってデバッガってのはICEとセットで使う物で、三次元のイメージなんですよね。
参考画像:ICE画像(微エロ)

JTAG ICEが一般的になる前は、ICEってのは測定器と一緒で貴重な物でした。ICE専用に別基板を起こしたり、剣山の上にCPUを乗せてちょっとでも斜め向くと動かないくせにケーブルが重いとか。電源の投入順序で電気的に壊れたりしました。今はJTAG+メモリ読み出し用のコネクタ程度で済むので良い時代になりました。

そんな僕はデバッガやコンパイラに手をいれるなんてとんでもないと思っているので、デバッガに手を入れていくというのに驚きました。この手の開発環境側に手を入れるのはリスクが大きくて、まあ仕事ではやらない。リスクが大きいってのは「手を入れた影響が把握できないから」につきる。デバッガ、コンパイラに比べるとRTOSをいじるのは抵抗が少ない。例えば、割り込みハンドラをフックして何か処理入れるとか、割り込みから戻る時にどこかに履歴を残すとかは大丈夫。結局の所、こういう事をしても他の所への影響は少ない事を、僕が判断できるからだと思う。

一般的にどこに手を入れたら他への影響が少ないのかって事を考えると、出力だけなら影響ないでしょって事でprintfデバッグに繋がる。非同期な処理が絡むとprintfってのは時間的なコストが大きいので、別のやり方を考えた方が良くって、その話はWin32マルチスレッドプログラミングに書いてあった気がする。

組み込み機器ってのは電源落とすまで基本的には無限ループに入っているのでデバッガが使いにくい状況がでてくる。ブレークかけるとWDTが働いてリセットかかっちゃうとか、通信系の受信バッファがあふれた結果相手側がエラーを検知して落としに来るとか、デバッガの手の届かない範囲で、CPUが止まったらエラー通知してシステム落とせ!って状況がある。この場合は、どうせ落ちるのならブレークかけたいところでめいっぱい情報を残して、自分から落ちた方が良かったりする。でも、最近のデバッガは割り込みの処理だけはしてくれるブレークがあるらしい。素晴らしい。

逆にデバッガにしか出来ない事ってのももちろんあって、一番使うのが異常な状況を作り出すこと。「仕様としてはありえないんだけど、ここに不正なデータがあったらこういう動きするよね」って状況で問題を切り分けたい。前段の処理でエラーチェックしているから不正なデータを渡せない、今の動いているプログラムは手を入れたくない、となるとデバッガで無理矢理そういう状況を作るしかない。デバッガ様々です。

組み込みのデバッグ手法って、人から人へのイメージがあるから、組み込み用ICE/デバッガの使いこなし的な本は欲しい。デバッガの各機能がどういう仕組みで動いているのかの解説書も欲しいと思う。「アドレスXXXXにn回アクセスしたときのブレーク」ってのは、アクセスの感知はどういう仕組みになっていて、n回のカウントはどこの保持してあって、ブレークはどうやってかけているのか、は説明欲しい。

例えばROM ICEだとブレーク時にNMIを使う物がある。基板にロジアナを繋いでNMIでトリガーをかけると、ブレーク前後の基板情報が取れる。こういうのもデバッガの拡張に入るのかもしれない。こういうのができるかどうかってのは、やっぱり仕組みがわかっているかどうかに行き着く。

今のJTAGデバッガだとどういう拡張ができるんだろう。

JTAGデバッガだけじゃなくて、本当のバウンダリースキャンや、FPGAのコンフィグ系まで含めてJTAG HACKSなら一冊分のネタが集まる気がする。

| | Comments (0) | TrackBack (0)

2009.04.22

最近の様子

最近、人の役に立っていない気がする。
勉強は止まってるし、ブログは書かないし、仕事は上手くいかないし。

スランプだな。

| | Comments (0) | TrackBack (0)

2009.04.06

実践Common Lispでちょっとした間違い

yuki_neko さんからブログに書けば?とアドバイスをもらったので。

p464 付録A LispWorksの所
(external-format:encode-lisp-string "日本語" :shiftjis)の:shiftjisは、恐らく:sjisの間違い。

以下、LispWorksの実行結果

CL-USER 1 > (external-format:encode-lisp-string "日本語" :shiftjis)
Error: Undefined external format :SHIFTJIS.
1 (abort) Return to level 0.
2 Return to top loop level 0.

Type :b for backtrace, :c

CL-USER 2 : 1 > (external-format:encode-lisp-string "日本語" :sjis)
#(147 250 150 123 140 234)

CL-USER 3 : 1 >


とはいえ、肝心のドキュメントは「This function exists in LispWorks 5.0 but is not documented・・」なっていて正解かどうかは分からない。今後変わる可能性もある。

タイトルが実戦だったので直しました!

| | Comments (0) | TrackBack (0)

2009.04.01

SDカードの読み出し

FPGAに直結のSDカードをSPIモードで読めるようになった。
リードとライトを間違えて、SDカードが一枚壊れたので、ライトも出来ていると思う。

ぱた☆へねで何かしようかと思ったが、どうみてもこちらを見てくださいで終わりそう。

http://naruken.cweb.tk/labo/mmc/index.html
http://www.amazon.co.jp/dp/4789849988/

最初に間違えたのが信号の方向で、DI、DOがカードから見ての入出力な事。
あとCMD17とCMD24だけは絶対に間違えては駄目だと言い続けていたのに、綺麗に間違えた。OpenSPARC周りの資料が入っていたSDカードがアクセス出来なくなって涙目。

需要があれば整理してみます。

| | Comments (0) | TrackBack (0)

« March 2009 | Main | May 2009 »