チュートリアル
変数値の遷移をモニタリングする方法
課題
・複数の変数の遷移を確認したい。
・変数の遷移を長時間モニタリングしたい。
解決方法
ソースコードに変数値出力ポイントを挿入することで、変数値をトレースします。
マルチウェーブスコープを使って、トレースした変数の遷移をリアルタイムでモニタリングします。
効果
DT10では、一度に複数の変数を長時間トレースすることができるため、
再現性の低い不具合原因調査も効率的に行えます。
ソフトウェアのステップ毎の通過履歴と変数値を同期させて確認ができるため、
修正内容が正しく意図通りに反映されているかの確認も容易に行えます。
ドライバの解説
変数値出力ポイントのドライバ処理は、弊社が提供するサンプルドライバを使用することで、ターゲット機器に応じたカスタマイズなどは不要です。
下図はGPIO4bitのデータフォーマットになります。
まず通過した変数値出力ポイントの位置情報を出力し、次に変数値のサイズ情報 及び 変数内の値を出力します。
/*=========================================================*/
/* Func: _TP_MemoryOutput */
/* Desc: Called by Variable Test Point */
/*=========================================================*/
void _TP_MemoryOutput( DT_UINT addr, DT_UINT dat, void *value, DT_UINT size )
{
portInit();
enterCritical();
_TP_BusOutDrv( addr | DT_VARIABLE_BIT, dat );
/* 2nd data output */
portSetCS(0);
/* output value */
_TP_MemoryOutDrv( (unsigned char *)value, size );
portSetCS(1);
exitCritical();
}
/*=============================================================*/
/* Func: _TP_MemoryOutDrv */
/* Desc: Value Output Function */
/*=============================================================*/
DT_INLINE void _TP_MemoryOutDrv( unsigned char *p, DT_UINT size )
{
if( size >= 256 ) size = 256;
_TP_BusOutByteDrv( size );
for( ; size != 0; --size, ++p ){
_TP_BusOutByteDrv( *p );
}
}
変数値出力ポイントの挿入
ソースコードビューから、変数値出力専用のテストポイントを挿入します。
ソースのコンパイルとテストレポートの取得
変数値出力ポイントが挿入されたソースコードをコンパイルし、ターゲットを動作させて、テストレポートを取得します。
テストレポート上では、「位置情報」と「変数のメモリの値」の2つのレポートで、1セットとなります。
「変数のメモリの値」が8Byte以上のデータの場合、「***** Dump memory ***** 」のレポートが、取得した変数のサイズ分だけ複数連続で表示されます。
マルチウェーブスコープでの変数値表示設定
マルチウェーブスコープを使用すると、変数遷移がリアルタイムでモニタリングできます。