ヘッダファイルに定義した#defineシンボル名をテストCSVに利用することはできますか?
よくある質問(FAQ)
ヘッダファイルに定義した#defineシンボル名をテストCSVに利用することはできますか?
CasePlayer2と連携して使用する場合には、#define シンボルを使用することができます。通常、#define シンボル情報はコンパイラのプリプロセッサによって処理されるため、コンパイル時にコードへ埋め込まれてしまい、オブジェクトファイル内にシンボル情報としては入りません。しかし、CasePlayer2を連携させることで、その解析結果である「#define 一覧」の情報がカバレッジマスターへ持ち込まれるようになります。カバレッジマスターのプロジェクトフォルダ内に生成される "Cp2Define.dat" ファイルがその情報に該当します。たとえば、
#define FALSE 0
#define TRUE 1
というソースに対しては
13,"FALSE","0"
13,"TRUE","1"
というテキストファイルが作成されます。これにより、カバレッジマスターwinAMSのテストCSV上で「FALSE」や「TRUE」といったシンボル名を直接使用できるようになります。これらを正常に機能させるためには、CasePlayer2において以下の設定が正しく行われているかをご確認ください。
1.CasePlayer2の「設定」タブの「仕様書生成」のダイアログを表示します
2.詳細設定の項目のうち、以下の設定がONになっていることを確認する
・詳細解析を行う
・#define一覧(ブラウザ情報)を生成する
・winAMS用プログラム解析情報を生成する
"Cp2Define.dat" は、カバレッジマスターwinAMSの起動時に、連携しているCasePlayer2から情報を読み取って生成・更新されます。そのため、CasePlayer2側で「全仕様書生成」を実行した後は、情報の変更を反映させるためにカバレッジマスターwinAMSを一度再起動してください。
なお、カバレッジマスターで利用可能な #define 定義には、以下の条件がございます。
<定義可能な例>
単純な数値定義
#define ABC (100) /* 'ABC'をテストデータの代わりに記述できます */
単純なグローバル変数
#define G_VAR1 g_var1 /* g_var1はグローバル変数 */
単純なグローバル変数の配列要素
#define G_A0 g_ary[0] /* g_aryは配列型のグローバル変数 */
単純なグローバル変数のメンバやビットフィールド
#define BIT1 g_st.bit1 /* g_stはビットフィールドのグローバル変数 */
#define MEMM g_ptr- >m /* g_ptrは構造体ポインタ型のグローバル変数 */
型キャスト付のI/Oアドレス
#define B_LED (*(volatile unsigned short*) 0x00080000) /* 0x00080000#U2#2 */
#define R_LED ((volatile unsigned short*) 0x00080020) /* 0x00080020#U2#2 */
レジスタマップ
#define P1 (*(volatile struct p1*) 0x00080100)
<定義ができない例>
演算を含む数値定義
#define ABC (100*2) /* 定義に演算が含まれる物は使用できません */
ファイル内スタティック変数
#define S_VAR1 s_var1 /* s_var1はファイル内スタティック変数 */
関数・マクロ関数
#define MFUNC(a) func1(a)
型キャスト付のグローバル変数
#define G_CPTR (char*)g_ptr
関数内ローカルなシンボルを使用しているもの
例えば、関数内static変数や、関数内ローカルな構造体のレジスタマップなど。