HOME

Call walker(ツールメニュー内)

<2008/11/27>
 スタック追跡ツールのCallWalkerの使い方が分かった。
 ツールチェーンで図のように設定してビルドする。
 で、CallWalkerを起動したら「File-Open」じゃなくて「File-Import stack file」とする。
 「File-Open」でやってて、ちっとも表示されなくて悩んだじゃんか。



スタックサイズの指定

 stacksct.h内の「#pragma stacksize」で指定する。
 これは「#pragma指令」だよ(#defineじゃない)。
 つまりSセクションの生成命令なのだ。
 リンカのセクション指定ではB,Rセクションに続いて配置しておけばOKよ(Sセクションの後ろには何も置かないこっちゃ)。
 resetprg.c内のPowerON_Reset()関数の先頭をICEでミックス表示すれば、スタックの開始アドレスをR15に設定してるのが見える。
 R15に設定された値とHEWのLinkMapListのSアドレスが同じか確認すればエエで。
 ※スタックの進み方はshも普通のCPUと同じなのだ。



特権DSPモードに入るぞ

 ところでDSPレジスタって勝手に使って良いの?
 調べる調べる・・勝手に使っちゃダメじゃん。
 ステータスレジスタ(SR)のDSPビットを立てろとさ。HARD取説 P95
 でもDSPビットなんて何処にもないじゃんか〜
 で、よくよく調べたら、普段は予約になってるステータスレジスタのビットがDSP用に割り当てられており、それのBIT12がDSPビットで、これを1にすると特権DSPモードに入れるのでありました。HARD取説 P96
 しかし、ホント、何でこんなに分かりづらいマニュアルなんだろ?俺に恨みでもあるのか?ステータスレジスタの説明のページにほんのちょっと「DSP使用時は予約ビットが拡張されます」と書いておいてくれたっていいじゃんか。
 ま、つまり演算の前に特権DSPモードに入っておかねばならんってことな。

// ステータスレジスタのDSPビットをONにする
void Oj3_SetSrDsp(void)
{
    set_cr(get_cr() | BIT12);
}


HOME