ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS

FAQ / カバレッジマスターwinAMS

テストデータ設定に関する問題

014_05 : レジスタマップ、定義名リストにて、ソースコードで定義したi/oポートが選択できません。どうすれば、選択可能になりますか?

【質問】
レジスタマップ、定義名リストにて、ソースコードで定義したi/oポートが選択できません。どうすれば、選択可能になりますか?レジスタマップの設定で作成しようとしても、「構造体の選択」に該当i/oポートの構造体が表示されません。


【回答】

サンプルコード

struct st_port {
  union {
    unsigned char BYTE;
    struct {
      unsigned char B7:1;
      unsigned char B6:1;
      unsigned char B5:1;
      unsigned char B4:1;
      unsigned char B3:1;
      unsigned char B2:1;
      unsigned char B1:1;
      unsigned char B0:1;
    } BIT;
  } DR;
};

#define PORT (*(volatile struct st_port *)0x10000000)
#define	PORT_TEST	PORT.DR.BIT.B6

void Test_IO(void)
{
  PORT_TEST = 1;	// 各出力ビットへビットコピー
}


上記の様なサンプルコードの場合、オブジェクトに構造体のデバッグ情報が出力されていれば、下の「レジスタマップ」「定義名リスト」のようにi/oポートが表示されます。


レジスタマップ(クリックで拡大)

 


定義名リスト(クリックで拡大)

 

@構造体のタグ名が宣言されていない場合(名無し構造体)や、Ai/oポートのアドレスへのアクセスを構造体の型でキャストしているコードにおいて、構造体の宣言がキャストのみに使用され実体が作成されていない場合には、コンパイラによっては構造体の型情報がデバッグ情報に出力されない事があります。(先に記載した要因が2つ該当する事もあります。)この場合には、カバレッジマスターのレジスタマップ、定義名リストが表示されません。


上記@を回避するには、下記のように構造体のタグ名を明記するようにして下さい。

typedef struct {
  <中略>
} st_port;
  ↓
typedef struct st_port{  // 定義名リストの構造体には、「t_st_port」ではなく「st_port」が表示されます。
  <中略>
} t_st_port;


上記Aを回避するには、下記のようにスタブソースファイル(AMSTB_SrcFile.c)若しくはダミーソースファイルに、構造体ポインタを宣言して、これをアクセスするようなダミーコードを追加して、オブジェクトをコンパイル・リンクして頂く必要があります。

例)
#include "構造体型定義ヘッダファイル"
#define NULL 0 volatile struct st_port *st_dummy; /* ダミー変数 */ /* ダミー関数(ダミー変数に代入) */ void dummy(void) {   st_dummy -> DR.BIT.B0 = NULL; // メンバ名までアクセス
}


関連サポート情報検索

【サポート情報サイト内Google検索】

検索キーワード: レジスタマップ | 定義名リスト | i/oポート

他のキーワード検索

 


参考情報・リンク