![]() |
![]() CqREEKのページへ戻る |
ここでは,よく寄せられるCQ RISC評価キット付属のデバッガPARTNER-CQ版 & PARTNER-J/Win評価版に関する質問についてお答えします.
なお,
PARTNER-CQ版とは…
→CQ RISC評価キット/SH-1 / SH-3 / V821 / Vr4300
に付属のデバッガで,正確にはPARTNER-CQ版/Winと呼びます.ここでは単にPARTNER-CQ版と呼びます.
PARTNER-J/Win評価版とは…
→CQ RISC評価キット/SH-4
に付属のデバッガです.
Q1.
CqREEK/SH-1/SH-3 および CqREEK/V821,CqREEK/Vr4300のCPUボードに搭載されているモニタROMを,別のCPUボードに使うことはできますか?A1.
キット付属のモニタROMは,そのCPUボード上で動作させる場合に限り使用できます.他のCPUボード上で動作させることは,添付のソフトウェア使用許諾書に違反します.
Q2.
COM1にモデムを接続したままCqREEKをインストールし,PARTNER-CQ版を起動するとハングアップします.PARTNER-CQ版はCOM1でもCOM2でも使用できるはずではなかったのですか?A2.
PARTNER-CQ版とCPUボードを接続するポートはCOM1でもCOM2でも対応していますが,デフォルトの状態ではCOM1に設定されています.よってCPUボードをCOM2に接続する場合は,COM1に接続した周辺機器を一度切り離すか電源をOFFにした状態でPARTNER-CQ版を起動してください.そのあと環境設定でポート番号をCOM2に設定して再起動してください.この設定が済めば,COM1を自由に使用できます.
Q3.
PARTNER-CQ版とCPUボード搭載モニタROMとの間の通信プロトコルは公開していますか? デバッガをPARTNER-CQ版でなく別のデバッガソフトウェアを自作して,それでCPUボードを制御したい.またはCPUボード搭載のモニタROMを別のCPUボードで使うことが許されていないので(Q1参照),このモニタROMと同等の動作をする別のモニタROMを作成し,別のCPUボードでPARTNER-CQ版を使いたい.Q3.
残念ながらPARTNER-CQ版とCPUボード搭載モニタROMとの間の通信プロトコルは公開していません.またPARTNER-CQ版とモニタROMはキット付属のCPUボードとの組み合わせでのみ使用できます.それ以外の組み合わせではソフトウェア使用許諾書に違反します.
Q4.
PARTNERではデバッグするプログラム???.oをダウンロードしますが,PARTNERで使用している間,このファイルを再コンパイルで更新したり削除したりできますか? 私の環境ではときどき排他制御に引っかかるのか,更新できていないときがあります.A4.
ダウンロード時,当然ファイルオープンしてファイルを読み込むわけですが,ダウンロードが終わるとクローズするので,ダウンロード時以外であれば,他のアプリケーションがそのファイルを更新したりすることも可能です.ただし,ダウンロード途中でCPUボードがハングアップしたようなとき,場合によってはファイルオープンしたままダウンロードが終了してしまうことがないとは言えません.この場合はPARTNERを再起動するしかありません.
それ以外の可能性としては,お使いのOSや環境で,何か排他制御を管理するツールやドライバが動いている可能性があります.お使いの環境をよく確認してください.
Q5.
PARTNERにどのような機能があるか知りたいのですが…A5.
Interface付属CD-ROM InterGigaのNo.10以降に,PARTNERを使ったデバッグのようすをスクリーンカムで録画したデータが収録されています.CD-ROMのメニューから“InterGigaオリジナル記事”を選択し,CQ RISC評価キットシリーズの紹介記事を選択してください.PARTNERの機能紹介が収録されています.
Q6.
PARTNER-CQ版 や PARTNER-J/Win評価版は,exeGCC-CQ版またはexeGCC評価版でコンパイルしたコードしかダウンロードできないのでしょうか? チップメーカ純正のコンパイラや他社製コンパイラでコンパイルしたコードはデバッグできませんか?A6.
キット付属のデバッガは,キット付属のコンパイラでコンパイルしたコードのみサポートしています.
それ以外のコンパイラをご使用になりたい場合は,PARTNER-CQ版 や PARTNER-J/Win評価版を使わずに,そのコンパイラに対応したデバッガを別途用意していただく必要があります.
Q7.
CPUボードにあるI/Oデバイスを接続し,PARTNERのメモリウィンドウからそのデバイスのレジスタに値を書き込んだのですが,ベリファイエラーがでて,書き込んだデータが表示されません.デバッガがバグっているのではないですか?A7.
RISC CPUではI/O空間をもったCPUはあまりありません.このようなCPUではメモリ空間にI/Oデバイスを接続することになります.PARTNERはその空間に通常のメモリが接続されているか,I/Oデバイスが接続されているかを認識していません.よってI/Oデバイスを接続した空間をメモリウィンドウで開くことも可能です.
メモリとは基本的にはデータを記憶するだけの素子です.書き換えなければ何度読み出しても内容は同じです.PARTNERのメモリウィンドウでは,指定したアドレス以降を連続してダンプ表示します.またメモリに対して書き込みをすると,すぐに同じアドレスを読み出して,正しく書き込みが行われたかどうかを確認します.
I/Oとは,それぞれアドレスごと(場合によってはビットごと)にI/Oレジスタとして異なった意味を持っています.読み出すたびに値が変わったり,不用意に読み出し動作をすると内部動作がおかしくなってしまうデバイスも存在します.PARTNERでI/Oデバイスを操作するには,コマンドウィンドウからI/Oアクセスコマンドを発行するのが正しい使い方となります.
もちろんその逆に,PARTNERではI/Oアクセスコマンドで通常のメモリアドレスを読み出すことも可能です.物理的には同じアドレスをメモリウィンドウでもI/Oコマンドでもアクセスできますが,その意味合いを十分理解して使い分けるようにしてください.
さて,ご質問の件ですが,たぶん接続されたデバイスはいわゆるI/Oデバイスであり,書き込み専用デバイス,もしくは書き込み時は書き込み専用レジスタ,読み出し時は読み出し専用レジスタがアクセスされる動作をするデバイスではないでしょうか?
基本的にI/Oデバイスを接続した空間をメモリウィンドウで開く使い方は正しくありません.すでに説明したようにメモリウィンドウでは,書き込んだ後に,書き込みが正常に行われたかどうかを確認するためにリード動作が発生します.書き込み専用のI/Oデバイスや,読み出しと書き込みで独立したレジスタをアクセスすることになるI/0デバイスの場合は,書き込んだデータとは違う値が読み出されるのでエラーになります.
I/Oデバイスを接続した空間をアクセスする場合は,コマンドウィンドウから以下のように操作します.
・8ビットサイズで読み出し
>PIB address[リターン]
・16ビットサイズで読み出し
>PIW address[リターン]
・32ビットサイズで読み出し
>PID address[リターン]
・8ビットサイズで書き込み
>POB address Data[リターン]
・16ビットサイズで書き込み
>POW address Data[リターン]
・32ビットサイズで書き込み
>POD address Data[リターン]
PARTNERのHELP機能で詳細をご覧ください.
Q8.
CPUボード搭載のモニタROMのソースは公開されていますか?A8.
キットには,モニタROMがどんな処理をしているかを示した参考用のソースが添付されています.しかしそれをコンパイルしてROM化しても実際には動作しません.
またQ3で説明したように,ソースを入手して他のCPUボードに移植するということはできません.
なお,CQ RISC評価キット/SH-4はJTAGデバッガ搭載なので,CPUボード上にはモニタROMは存在しません.フラッシュROMにもモニタROMのプログラムは書き込まれていません.
Q9.
PARTNER-CQ版 および PARTNER-J/Win評価版はデフォルトがビッグエンディアンだと思いますが,リトルエンディアンはサポートしていますか?A9.
SH-3やSH-4などのように,エンディアンを変更できるCPUもありますが,PARTNER-CQ版 および PARTNER-J/Win評価版はビッグエンディアンのみサポートしています.
Q10.
printf関数でPARTNERのコンソールウィンドウに次々と計算結果を表示するようなプログラムを作ったのですが,時々表示が止まって「CPUボードがハングアップしました」というメッセージが表示されます.A10.
バックグラウンドで処理の重いプログラムを走らせているか,デスクトップに画面を書き換える常駐ソフトやスクリーンセーバーなどを走らせていませんか? CPU負荷が重くなると,CPUボードとの通信に失敗してモニタROMとの通信がおかしくなる場合があるようです.CPUパワーのあるマシンでは発生しないようなので,CPU負荷との関係もあるようです.
Q11.
long long型(64ビットサイズ)の変数をPARTNERでウォッチしても,上位32ビットしか表示されません.コンパイラのバグで実は32ビット型になってしまったでしょうか? それともデバッガのバグでしょうか? CPUはVr4300です.A11.
CQ RISC評価キット/SH-1/SH-3/SH-4/V821/Vr4300 に付属のPARTNER-CQ版およびPARTNER-J/Win評価版は long long型 の変数をサポートしていません.これはPARTNER自身を開発するために使ったコンパイラが未対応だからです.将来のバージョンでは対応予定です.
Q12.
PARTNER-CQ版を使っていると,ブレークポイントなどを設定していないのに,ときどきプログラムカウンタがアドレス0を示してプログラムの実行が終了している(デバッガがアイドリング状態に戻る)ことがあります.原因は何でしょうか?A12.
具体的にどんなプログラムをデバッグ中にそうなるのか,プログラムを見ていないので正確なことはわかりませんが,いくつかの原因が考えられます.
PARTNER-CQ版は基本的にはROMモニタ型デバッガです.ROMモニタ型デバッガの基本的なしくみですが,例えばブレークしたいアドレスに未定義命令などを埋め込んでおき,それをCPUが実行しようすると例外が発生します.その未定義例外割り込みをROMモニタ内で処理することで,ステップ実行などを実現しています.
さて,アドレスが0に戻ってしまう原因としてまず考えられるのが,不正なアドレスをアクセスしたために,アドレス例外などが発生した可能性です.本来何らかのOSが動いていればこれらのアドレス例外に対する適切な例外処理ルーチンがあるのですが,モニタROM内にはそのような例外を処理するプログラムは入っていません.つまりアドレス例外が発生した後,CPUがどのように動くかはわかりません.正しく設定されていない割り込みベクタを読み込んで暴走状態になるでしょう.つまりほとんどの場合,アドレス例外が発生して例外処理プログラムを実行しようとして,また未定義命令例外が発生することになります.CPUのアーキテクチャにもよりますが,例外処理中にまた例外が発生すると,CPUはもう何を信じて良いかわからなくなるので(?),たいていはリセットと同じ処理をするのが一般的です.リセットと同じということは,CPUボードの電源投入と同様,モニタROMの再起動ということになり,結果的にPARTNER-CQ版は初期状態に戻るわけです.
アドレス例外は,アドレスそのものは有効でも,アクセス位置やサイズが不正な場合にも発生します.例えば奇数アドレスからワードアクセスをしたり(CPUアーキテクチャによっては可能な場合もある),CPU内蔵レジスタにはアクセスサイズが決められているレジスタもあり,例えば16ビット専用レジスタにバイトサイズでアクセスした場合などにも発生するでしょう.これらはCPUのハードウェアマニュアルをよく参照して,アクセス方法に問題がないか確認するしかありません(SH-1に関しては,このような状態が発生する具体的なプログラムを示しています.こちらをご参照ください).
それ以外の可能性としては,割り込み処理をするプログラムを開発中に,割り込みベクタが正しく設定されていないために,周辺機能が割り込みを要求したとたん,同じように例外処理中に未定義命令例外が発生することもあるでしょう.
例外によるリセットという可能性以外では,スタック処理上の問題も考えられます.メモリポインタの操作ミスで,あやまってスタックエリアに0を書き込んでしまった場合などです.サブルーチンから戻ろうとしてスタックを取り出すと,そのアドレスが0になっているわけですから,SH-1などの場合はリセット起動と同じことになってしまいます.
Q13.
開発が終わった後でも使用中に何か不都合があったなど,デバッグモードに入れるようにしたいので,モニタROMの内容をそのまま取り込んで,開発したプログラムと同じROMに書き込んで使用することはできますか?A13.
ソフトウェア使用許諾書に明記されているように,本CPUボード搭載のモニタROMの内容を,他のいかなる媒体にも読み出すことはできません.そのような使い方はできません.
Q14.
メモリのダンプやI/Oレジスタへのアクセス,またアドレスを指定してGoといったような簡単なデバッグモニタをシステムに組み込んで実装したいと思います.PARTNERやモニタROMはそのような目的では使えなそうなので,何か他にモニタプログラムはないでしょうか?A14.
CqREEK/SH-1(SH7032)用としては,ソースも公開されているフリーなモニタプログラムが存在します.この書籍に付属のCD-ROMにも収録しているので参照してください.さらにCqREEK/SH-3には直接は使えませんが,SH7709用のモニタプログラムも収録されているので,CqREEK/SH-3(SH7708)にはこれを参考に移植するのもよいかと思います.
CqREEK/V821用としては,Interface1997年5月号付属CD-ROM InterGiga No.6に,V821用のモニタプログラム SDV830 が全ソース付きで収録されています.Cのソースレベルデバッグには対応していませんが,SYMDEBライクなかなりのデバッグ機能を持っている優れものです.ダウンロードコーナからもダウンロード可能です.
また,デバッグ機能と呼べるものはありませんが,exeGCC-CQ版でコンパイルしたコードを,単にダウンロードさせて実行するだけのダウンローダープログラムを用意しています.CqREEK/SH-1用およびCqREEK/V821用については,ダウンロードコーナからダウンロード可能です.
CqREEK/SH-3/SH-4/Vr4300については現在開発中です.今しばらくお待ちください.
これ以外のCPUについては,フリーで使えるモニタソースについての情報はありません.
Q15.
CPUに仮想記憶モードがある場合,PARTNERはTLBやMMUを使った仮想記憶モード動作時でも使えますか? 仮想記憶モードを使った本格的なOSを載せて,カーネルデバッグもしたいので…A15.
CQ RISC評価キット/SH-4はJTAGデバッガであるため,仮想記憶モードでもデバッガ自体は動作します.しかしMMUの設定状態によっては,各種シンボルなどのアドレスがデバッガの表示と食い違う場面も出てくることが予想されます.
CQ RISC評価キット/SH-3およびVr4300は,ROMモニタ型デバッガであるため,仮想記憶モードでモニタROMが動くかどうかが問題です.
SH-3版はモニタROMが動作している空間が,仮想記憶アドレス空間で動いているため,リセット起動時はMMUが動作していない(物理アドレス=論理アドレス)ため問題なく動作していますが,仮想記憶を有効にしたとたん,モニタROMは動作しなくなると思われます.
Vr4300版では仮想記憶を有効にしても論理アドレス=物理アドレスが保たれる非仮想記憶アドレス空間にモニタROMを置いているため,SH-4同様にデバッガ自身は動作すると思われます.
なお,SH-1やV821にはCPUそのものに仮想記憶モードがありません.
Q16.
PARTNER-CQ版 や PARTNER-J/Win評価版が対応しているオブジェクトコード形式は何でしょうか?A16.
Q6にあるように,本キット付属のデバッガはキット付属のコンパイラでコンパイルしたコードのみ対応しています.よって対応オブジェクトコード形式として明記していません.
なおexeGCC-CQ版またはexeGCC評価版の出力コード形式については,こちらをご参照ください.