デバッガ用ソフトウェアパーツ

デバッガ用ソフトウェアパーツとしてソースブレーク・標準出力―[PUTCH]が用意しています。


ソースブレーク(ROMエリア専用)
[ソースブレークとは?]
 Cソースに直接ブレーク文「SBREAK()」を記述し、実行時その記述文に到達した場合ブレークする。(BASICでの「STOP」文と同じです。)
この方式のソフトブレークを「ソースブレーク」と称することにしました。

なぜソースブレーク方式にしたかの理由は、この方式で無いソフトブレークを実現させるには、1回のブレークと実行の前後に2〜3回の命令書き換えが必要になります。(原理説明は省略します。)
プログラムエリアが「RAM」の場合は問題がないのですが、フラッシュROMの場合は問題が山積みになります。
書き込み回数の制限、書き込みがブロック単位(1〜64Kバイト)、書き込みスピード、等々。
「H-debugger」は、この問題を解決する方法として、ブレーク文をデバッガでストア/リストアするのではなく、必要個所に最初からブレーク文を記述しておき、そのブレーク文を有効(停止)/無効(通過)できたら便利ではないかと思いました。
この思い込みにより「
ソースブレーク」機能を追加しました。

概略操作を説明をします。


【注意事項】
Hew(ルネサスC)SH-2の場合、DEFバージョン4.70Aより、「nop()」記述の出来ない古いコンパイラバージョンをお使いの場合、ソフトパーツを使用することができません。
・RAMエリアの場合は、
ソフトブレーク(8ポイント)を用意しました。 詳細はこちらを御覧下さい。

[Cソース記述例]
"main.c"

#define DEBUG /* ソフトウェアパーツが使用可能になります。*/
#include "GnuDebugH8.h" /* GNU/gcc H8シリーズの場合*/

main() {
  while(1) {
    SBREAK(); /* <―― ソースブレーク文です。*/
  }
}


「*.h」は、C言語/CPU別に用意してあります。

[VIEW表示例]
青緑網掛け-色文字:  ソースブレークの通過指定を意味します。
青緑網掛け-色文字:  ソースブレークの停止指定を意味します。
茶色網掛け-色文字: 16ポイント超過分のソースブレークポイントを意味します。
ここのポイントは、通過指定はできません。
操作説明
1)青緑網掛け上でダブルクリックしますと通過/停止の切り換えが出来ます。

[ソースブレーク検索窓]
操作説明
1) ソースブレーク検索窓の「ALL」部のチェックBOXは、全てのソースブレークポイントの通過/停止を指定します。
2) ソースブレーク検索窓のポイント別チェックBOXは、個別のソースブレークポイントの通過/停止を指定します。
3) ソースブレーク検索窓のアドレス/ラインシンボル欄でダブルクリックしますとそのアドレスのCソースがView画面上に表示します。

[ソースブレークの制限事項]
1) この機能は、C言語記述のみです。
2) 通過設定のために、ターゲット側の内蔵RAMを64バイト使用します。使用場所はCPU品種により違います。(DEF Ver6.50Aから)
3) 管理できるポイントは、16ポイントです。
4) 通過判定の処理時間に約5〜15μs必要です。
5) この機能を使用する場合、モニタワークエリア方式は「スタック方式」に限ります。
※CPUがH8S/2633[クロック19.6608MHz]の実測値。CPUタイプおよびクロックで変化しますので注意して下さい。

標準出力―[PUTCH]
[標準出力-[PUTCH]とは?]
Cソース行に標準出力文「PUTCH(char a)」を直接ソース行に記述することにより、
ローカル変数等のデバッガ情報表示をPUTCH窓に表示させることができます。

[Cソース記述例]
"main.c"

#define DEBUG /* ソフトウェアパーツが使用可能になります。*/
#include "GnuDebugH8.h" /* GNU/gcc H8シリーズの場合*/
//**********************************************************
// main()
//**********************************************************
main()
{
  while(1) {
    sprintf("H−debugger AH6000"); /* <−表示文例です。*/
  }
}
//**********************************************************
// sprintf() デバック用(文字列表示)
//**********************************************************
void sprintf(char *ptr)
{
  while(*ptr != 0) { _putch(*ptr++);}
}
//**********************************************************
// _putch デバック用(1キャラコンソール出力)
//**********************************************************
void _putch(char a)
{
  register char b asm("r0");
  b = a;
  PUTCH(b);
}

※「*.h」は、C言語/CPU別に用意してあります。

[PUTCH窓表示例]
操作説明
1) 「表示更新」PBを押下しますと「DEF」内部バッファに溜まった表示データを全て表示します。
2) 「周期更新」チェックBOXを「チェック」しますと「DEF」が吸上げた表示データを即時に表示します。
3) 「Index」は、「DEF」内部の表示バッファの格納インデックスを示します。
4) 「表示数」は、「DEF」内部の表示バッファの表示インデックスを示します。
5) 「PUTCH窓」での右クリックのプルダウンメニューにより表示文字および内部バッファを全消去することができます。

[制限事項]
1) 標準文字列表示関数「printf()」ではありませんので注意してください。
2) PUTCH(char a)を実行させるため処理時間はターゲット側が約200μs必要です。
※CPUがH8S/2633[クロック19.6608MHz]の実測値。CPUタイプおよびクロックで変化しますので注意して下さい。
3) 処理時間中は、他の割り込み全てが禁止されます。
4) パソコン側に表示させるまでの時間として「1バイトあたり約1ms」必要です。