カバレッジマスターwinAMS
2017.04.03_V3.6

埋め込みコードカバレッジ計測
FAQ集

本書は、埋め込みコード（カバレッジ測定用オブジェクト）環境作成時に、手順通り実施して、カバレッジ計測が正しく出来ない場合の対応方法について記載しています。
埋め込みコードの使用方法については、ユーザー向け技術サポート情報から参照できる下記チュートリアルの「【応用編】埋め込みコードによるカバレッジ計測」を参照してください。
http://www.gaio.co.jp/support/user/pdf/CoverageMaster_Tutorial.pdf
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

1

カバレッジマスターwinAMS

目次①■ 埋め込みコードを利用したカバ
レッジ測定機能 P4～■ 埋め込みコードを利用して計測できるカバレッジ計測の種類について P7～■ カバレッジ計測が正しく実行されない例 P9～■ カバレッジ計測されない原因概要 P11～■ 【詳細①A】文字列型定数のア
ドレスが正しく渡らない場合
P14～➢ FMC16LX P20～
➢ FMC16FX P24～

■ 【詳細①A】文字列型定数のア
ドレスが正しく渡らない場合➢ RL78(S2,S3コア) P28～
➢ M16C P32～
➢ TX03(ARM Cortex-M3) P35～

■ 【詳細①B】
文字列型定数のアドレスが正しく渡らない場合➢ E200zxxx系 P37～
➢ V850E2M / RH850 P39～

■ 【詳細②】
カバレッジ計測用変数が初期化される場合 P41～

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

2

カバレッジマスターwinAMS

目次②■ 【詳細③A,B】
マイコン、コンパイラ特有の問題➢ V850 / GHS P43～
➢ R32C / NC100 P45～

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

3

カバレッジマスターwinAMS

埋め込みコードを利用したカバレッジ測定機能

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

4

カバレッジマスターwinAMS

実コード計測と埋め込みコード計測を併用■ カバレッジ計測のために フックコードを埋め込み カバレッジ計測実行– MC/DC、関数コールカバレッジはオプション機能■ 最適化やマシン語展開によるカバレッジ計測不足の影響なし■ カバレッジのみ「埋め込みコード」から計測
実行結果（期待値比較）は 「実コード」から取得し評価 ←重要！
– 実行結果は実コードから取得することで テスト品質を保つ
テスト品質を保つ「実コード」単体テスト「メイン」実行ライン

MAIN
実行

カバレッジ計測のための「サブ」実行ライン

SUB
実行

製品に実装するマイコン

実ターゲットコード

カバレッジマスター
winAMS

解析コードを
自動埋め込みカバレッジ計測用「埋め込みコード」
実行

カバレッジマスター
winAMS

単体テスト
入出力実行結果を取得

カバレッジ
のみ計測

テスト品質が保たれる
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

5

カバレッジマスターwinAMS

埋め込みコードによるカバレッジ計測機能：詳細処理フロー■ 「実コード」と「埋め込みコード」を並列実行– カバレッジ計測用（フック）コードを自動挿入し実行– 入出力テスト、期待値評価には」、製品実装と同じ「実コード」から取得
実コードビルド環境

MAIN
実行

評価対象の
ソースコードカバレッジ計測専用 ビルド環境

if( ( x>10 && y>20 ) || z>30 )クロスコンパイラ

製品実装時と同じ最適化オ
プションを使用
可能

0110
0010
1010

SUB
実行

WinAMS_SPMC_C0();if((WinAMS_SPMC_C1("func_
mcdc_01",3),WinAMS_SPMC_Clr(),….

CasePlayer2が実行

クロスコンパイラ
0110
0010
1010

製品搭載
実機コード

カバレッジマスター
winAMS
単体テスト実行※C0計測も埋め込みコードで計測可能カバレッジ計測用
コードを追加した
ソースコードカバレッジ計測
コード自動挿入機能

入力テストデータ

カバレッジマスター
winAMS
単体テスト実行

一致する
ことを確認

C0,(C1),関数
カバレッジ取得

実行結果取得カバレッジ取得のための実行コード

埋め込みコード
からの期待値(C0),C1,(MC/DC),(関数コール)カバレッジ取得

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

カバレッジ計測用コード
を正しく実行するために、最適化をOFFにすることを推奨

カバレッジ計測用ビルド環境
は、C0、MC/DC、関数コー
ルカバレッジのどれを計測するか選択できます。

C1カバレッジは必ず、カバレ
ッジ計測用ビルド環境から計測されます。

6

カバレッジマスターwinAMS

埋め込みコードを利用して計測できる
カバレッジ計測の種類について

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

7

カバレッジマスターwinAMS

カバレッジ計測の種類について■ 「埋め込みコードの設定」で、取得するカバレッジを選択– C0,MC/DC（オプション機能）,関数コール（オプション機能）カバレッジ– C1カバレッジは、デフォルト計測され、選択不可– C0カバレッジが未選択の場合は、実コードビルド環境からカバレッジ計測

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

8

カバレッジマスターwinAMS

カバレッジ計測が正しく実行されない例

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

9

カバレッジマスターwinAMS

カバレッジ計測が正しく実行されない例■ 正常にカバレッジ計測
できる場合■ 正常にカバレッジ計測できない場合「起動設定」-「実行するオブジェクトの指定」-「カバレッジ測定用オブジェクトファイ
ル」にカバレッジ計測専用 ビルド環境のオブジェクトを指定していない場合や、環境作成の手順間違いの場合

カバレッジ計測用関数が参照しているヘッダファイルの定義を使用しているマイコンに合わせて調整していない場合など

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

10

カバレッジマスターwinAMS

カバレッジ計測されない原因概要

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

11

カバレッジマスターwinAMS

カバレッジ計測されない原因概要①■ 原因は様々、ほとんどの原因は下記①に起因① カバレッジ計測用関数で使用するテスト対象関数名若しくは、カバレッジ測定用情報ファイルパス名が正しく渡らない場合※C1,MC/DCカバレッジともに0%A)

マイコンの特性（ミラー機能など）により、文字列型定数のアドレスが正しく渡らない場合➢

B)

関連MPU：
FMC16LX, FMC16FX, RL78(S2,S3コア), C2000(C28x), M16C,
TX03(ARM Cortex-M3)

テスト対象アプリの初期化が正しく実施されず、ベースアドレスが不正で、文字列型定数のアドレスが正しく渡らない場合➢

関連MPU：
e200z710/e200z410/e200z425, V850E2M, RH850② テスト対象関数の実行中に、カバレッジ計測用変数が初期化される場合※C1カバレッジは計測できるが、MC/DCカバレッジのみ0%Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

12

カバレッジマスターwinAMS

カバレッジ計測されない原因概要②■ 原因は様々、ほとんどの原因は前頁①に起因③ マイコン、コンパイラ特有の問題
A)

LSB/MSBの指定違いに依って、正しい条件分岐ができない場合※C1カバレッジは計測できるが、MC/DCカバレッジのみ0%➢B)

関連MPU(コンパイラ)：
V850(GHS), V850E2M(GHS)

最適化の影響で、実コードビルド環境のカバレッジ計測ができない場合※C0カバレッジが0%➢

関連MPU(コンパイラ)：
R32C(Hew)

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

13

カバレッジマスターwinAMS【詳細①A】
文字列型定数のアドレスが正しく渡らない場合

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

14

カバレッジマスターwinAMS

アドレスが正しく渡らない場合【参考①】■ 文字列型定数の詳細については、カバレッジマスターwinAMSのヘルプ（※）をご参照下さい※[winAMS]-[技術情報][カバレッジ測定用オブジェクトを使ったカバレッジ測定]-[カバレッジ測定用オブジェクトを使ったカバレッジ測定のための準備]① 圧縮埋め込みOFF[カバレッジ測定ソース(ヘッダ)ファイル][カバレッジ測定用のコードにおける文字列型の変更]② 圧縮埋め込みON[圧縮埋め込みコードにおけるカバレッジ測定ソース(ヘッダ)ファイルと文字列型の変更]

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

15

カバレッジマスターwinAMS

アドレスが正しく渡らない場合【参考②】■ カバレッジ計測用関数① 圧縮埋め込みOFF（WinAMS_SPMC.c）① C0計測用：BOOL WinAMS_SPMC_C0(WinAMS_SPMC_TFUNCNAME
funcname,WinAMS_SPMC_U4 line)② C1計測用：BOOL WinAMS_SPMC_C1(WinAMS_SPMC_TFUNCNAME funcname,U4
blkID)③ MC/DC計測用：BOOL WinAMS_SPMC_Res(WinAMS_SPMC_TFUNCNAME
funcname,U4 resID,BOOL res,U2 expcnt,U4 blkID)④ 関数コール計測用：void WinAMS_SPMC_CALL(WinAMS_SPMC_TFUNCNAME
funcname,WinAMS_SPMC_U4 callID)② 圧縮埋め込みON（WinAMS_SPMC_Com.c）① C0計測用：BOOL WinAMS_SPMC_Com(WinAMS_SPMC_TFILENAME_PTR file,U4
index)② C1計測用：BOOL WinAMS_SPMC_Com(WinAMS_SPMC_TFILENAME_PTR file,U4
index)③ MC/DC計測用：BOOL WinAMS_SPMC_Res_Com(WinAMS_SPMC_TFILENAME_PTR
file,U4 index,BOOL res)④ 関数/関数コール計測用：
BOOL WinAMS_SPMC_Com(WinAMS_SPMC_TFILENAME_PTR file,U4 index)
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

16

カバレッジマスターwinAMS

文字列型定数のアドレスが正しく渡らない場合①
1. 文字列型定数のアドレスが正しく渡っているか確認します
2. アドレスが正しく渡っていない場合は、カバレッジ計測用関数が参照しているヘッダ
ファイルを修正します➢

圧縮埋め込みコードのON/OFFで、関連関数（ファイル）と修正方法が変わります。
――➢

圧縮埋め込みコードOFF : winAMS_Spmc.c, winAMS_Spmc.h, winAMS_SpmcDefine.h
圧縮埋め込みコードON : winAMS_Spmc_Com.c, winAMS_Spmc_Com.h, winAMS_SpmcDefine_Com.h

カバレッジ計測用関数が含まれるファイルは、ツールのインストールフォルダ(テンプレート)から、カバレッジ計測専用 ビルド環境にコピーされます。カバレッジ計測専用 ビルド環
境作成の度にファイルの修正をしない場合は、テンプレートの変更が必要になります。
例）C:¥Program Files¥gaio¥CasePlayer2¥template¥winAMS_Spmc.c
C:¥Program Files¥gaio¥CasePlayer2¥template¥winAMS_Spmc.h
C:¥Program Files¥gaio¥CasePlayer2¥template¥winAMS_SpmcDefine.h

3. 上記のファイルを使用して、カバレッジ計測用オブジェクトを再作成します
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

17

カバレッジマスターwinAMS

文字列型定数のアドレスが正しく渡らない場合②■ アドレスの確認方法（圧縮埋め込みOFF【デフォルト】の場合）
カバレッジ計測用関数にテスト対象関数名のアドレスが正常に設定されている かの確認方法
1.
2.

3.
4.
5.

カバレッジ測定用オブジェクトで、任意の関数（例：func1）のテストを実行
C1計測用の関数（WinAMS_SPMC_C1）にブレー
クポイント（例：151行目）を設定して、そこまで実行
コマンドウィンドウで、「print funcname」を実行し第1引数のアドレス確認
上記3.で確認したアドレスを使って「dump」実行
コマンドウィンドウの右側にテスト対象関数名が表示される※表示されなければ、関数名が正常に渡っていない事になる例)>print funcname
00050850>dump 0x00050850#32(or 64, or 128)
00050850(0000):xxx xxx func1.func1.func1
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

18

カバレッジマスターwinAMS

文字列型定数のアドレスが正しく渡らない場合③■ アドレスの確認方法（圧縮埋め込みONの場合）
カバレッジ計測用関数にテスト対象関数名のアドレスが正常に設定されている かの確認方法
1.
2.
3.
4.
5.

カバレッジ測定用オブジェクトで、任意の関数（例：func1）のテストを実行カバレッジ計測用の関数（WinAMS_SPMC_Com）にブ
レークポイント（例：135行目）を設定して、そこまで実行
コマンドウィンドウで、「print file」を実行し第1引数のアドレス確認
上記3.で確認したアドレスを使って「dump」実行
コマンドウィンドウの右側にカバレッジ測定用情報ファイ
ルパス名（YYYYMMDDHHMM;ファイル名_c¥ファイル
名.cvInf）が表示される※表示されなければ、カバレッジ測定用情報ファイルパス
名が正常に渡っていない事になる例)>print file00050850>dump 0x00050850#64(or 32, or 128)
00050850(0000):xxx xxx 20150324155727;m
00050860(0010):xxx xxx ain_c¥main.cvInf
00050870(0020):xxx xxx o

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

19

カバレッジマスターwinAMS【詳細①A】
文字列型定数のアドレスが正しく渡らない場合
マイコン：FMC16LX

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

20

カバレッジマスターwinAMS

マイコン：FMC16LX ①■ 文字列型定数のアドレスが正しく渡らない原因① スモールモデル若しくはミディアムモデルの場合、カバレッジ計測用関数の第１引数の文
字列型定数のアドレスには（A）ROMミラー領域の論理アドレス（0x8000～0xFFFF）が渡る② 文字列型定数の実体は（B）ROM領域の物理アドレス（0xFF8000～0xFFFFFF）に配置されている③ カバレッジ計測用関数はデフォルト設定では、上記（A）を参照している為、計測対象の関数名が解析できない■ 対応策① カバレッジ計測専用ビルド環境に含まれるカバレッジ計測用関数の定義を変更する② 上記でコンパイルしたカバレッジ計測用オブジェクトを利用する。

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

21

カバレッジマスターwinAMS

マイコン：FMC16LX ②■ 対応策（続き①）① 圧縮埋め込みコードOFF「winAMS_SpmcDefine.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* 【Reference】Add 関数引数の型にconst追加(winAMS_Spmc.hが参照) *//* 【Reference】Add 問題が解決しない場合は、constを追加しない(SW_WinAMS_SPMC_const_funcname 0) */#define SW_WinAMS_SPMC_const_funcname 1#if SW_WinAMS_SPMC_const_funcname#define WinAMS_SPMC_const_funcname 1#endif/* A user defines the type of the string of the function name *//* 【Reference】Mod WINAMS_SPMC_USR_DEF_TFUNCNAME を0 から 1に変更*/#define WINAMS_SPMC_USR_DEF_TFUNCNAME 1/* 0:not define, 1:define */#if WINAMS_SPMC_USR_DEF_TFUNCNAME/* example *//* 【Reference】Mod WinAMS_SPMC_BASE_TFUNCNAME を char から char __far に変更*///#define WinAMS_SPMC_BASE_TFUNCNAME char/* base type=char *//* #define WinAMS_SPMC_BASE_TFUNCNAME signed char *//* base type=signed char *//* #define WinAMS_SPMC_BASE_TFUNCNAME unsigned char */ /* base type=unsigned char */#define WinAMS_SPMC_BASE_TFUNCNAME char __far/* base type=char __far *//* 【Reference】Mod fname を ROMミラーリング機能に合わせて変更 *///#define WinAMS_SPMC_CVT_FUNCNAME(fname) (fname)/* funcname pointer convert */#define WinAMS_SPMC_CVT_FUNCNAME(fname) ((WinAMS_SPMC_TFUNCNAME)((unsigned long)(fname) | 0xff0000))

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

22

カバレッジマスターwinAMS

マイコン：FMC16LX ③■ 対応策（続き②）② 圧縮埋め込みコードON「winAMS_SpmcDefine_Com.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* A user defines the type of the string of the file name *//* 【Reference】Mod WinAMS_SPMC_BASE_TFILENAME を char から char __far に変更*///#define WinAMS_SPMC_BASE_TFILENAME char/* base type=char *//* #define WinAMS_SPMC_BASE_TFILENAME signed char *//* base type=signed char *//* #define WinAMS_SPMC_BASE_TFILENAME unsigned char */ /* base type=unsigned char *//* 【Reference】Add WinAMS_SPMC_BASE_TFUNCNAME を char から char __far に変更*/#define WinAMS_SPMC_BASE_TFILENAME char __far/* base type=char __far */#define WinAMS_SPMC_TABLE_PTR_TATTR1#define WinAMS_SPMC_TABLE_PTR_TATTR2/* #define WinAMS_SPMC_TABLE_PTR_TATTR1 far */#define WinAMS_SPMC_TABLE_TATTR/* #define WinAMS_SPMC_TABLE_TATTR far *//* type tatt1 *name *//* type *tatt2 name *//* example *//* type tatt name[] *//* example *//* 【Reference】Mod fname を ROMミラーリング機能に合わせて変更 *///#define WinAMS_SPMC_CVT_TABLE_PTR(fname) (fname)/* table pointer convert */#define WinAMS_SPMC_CVT_TABLE_PTR(fname) ((WinAMS_SPMC_TFILENAME_PTR)((unsigned long)(fname) |0xff0000))/* example */#define WinAMS_SPMC_CONST const /* const table *//* #define WinAMS_SPMC_CONST */ /* not const table */Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

23

カバレッジマスターwinAMS【詳細①A】
文字列型定数のアドレスが正しく渡らない場合
マイコン：FMC16FX

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

24

カバレッジマスターwinAMS

マイコン：FMC16FX ①■ 文字列型定数のアドレスが正しく渡らない原因① スモールモデル若しくはミディアムモデルの場合、カバレッジ計測用関数の第１引数の文
字列型定数のアドレスには（A）ROMミラー領域の論理アドレス（0x8000～0xFFFF）が渡る② 文字列型定数の実体は（B）ROM領域の物理アドレス（※0xFn8000～0xFnFFFF）に配置されている※1.n=0x0~0xF, ROMミラー機能選択レジスタ(ROMM)のミラーリングバンク選択
ビット(bit7～bit4)によって、バンクの値が変わる※ROMミラー機能を利用していない場合（ROM ミラー機能許可（bit0=0））は、上記1.の マップファイルサンプル（*.mp1）
DATA N RW-- 01 ABS Register Bank No. 00
限りではありません。マップファイルを参照し 00000180-0000018F 00000010~ 省略 ~
00000000 CONST P R--I 02 REL DCLEARて、const領域の先頭1バイトのアドレスを確 00DF2002-........
00FE0000-00FE0403 00000404 CONST P R--I 02 REL CONST
認する必要があります。（右の例だと、0xFE） 00FF0000-00FF0FE8 00000FE9 CODE P R-XI 01 REL CODE
③ カバレッジ計測用関数はデフォルト設定では、上記（A）を参照している為、計測対象の関数名が解析できない■ 対応策① カバレッジ計測専用ビルド環境に含まれるカバレッジ計測用関数の定義を変更する② 上記でコンパイルしたカバレッジ計測用オブジェクトを利用する。
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

25

カバレッジマスターwinAMS

マイコン：FMC16FX ②■ 対応策（続き①）① 圧縮埋め込みコードOFF「winAMS_SpmcDefine.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* 【Reference】Add 関数引数の型にconst追加(winAMS_Spmc.hが参照) *//* 【Reference】Add 問題が解決しない場合は、constを追加しない(SW_WinAMS_SPMC_const_funcname 0) */#define SW_WinAMS_SPMC_const_funcname 1#if SW_WinAMS_SPMC_const_funcname#define WinAMS_SPMC_const_funcname 1#endif/* A user defines the type of the string of the function name *//* 【Reference】Mod WINAMS_SPMC_USR_DEF_TFUNCNAME を0 から 1に変更*/#define WINAMS_SPMC_USR_DEF_TFUNCNAME 1/* 0:not define, 1:define */#if WINAMS_SPMC_USR_DEF_TFUNCNAME/* example *//* 【Reference】Mod WinAMS_SPMC_BASE_TFUNCNAME を char から char __far に変更*///#define WinAMS_SPMC_BASE_TFUNCNAME char/* base type=char *//* #define WinAMS_SPMC_BASE_TFUNCNAME signed char *//* base type=signed char *//* #define WinAMS_SPMC_BASE_TFUNCNAME unsigned char */ /* base type=unsigned char */#define WinAMS_SPMC_BASE_TFUNCNAME char __far/* base type=char __far *//* 【Reference】Mod fname を ROMミラーリング機能に合わせて変更 *///#define WinAMS_SPMC_CVT_FUNCNAME(fname) (fname)/* funcname pointer convert *//* 【Reference】Mod ROMミラー機能選択レジスタ(ROMM)のミラーリングバンク選択ビット(bit7～bit4)によって、下記の *//* 0xff0000のff部分がf0～ffに変わります。環境に合わせて変更してください。（下記は、ミラーリングバンク選択ビットが *//* 「1111」(FFhバンク) ）の場合 */#define WinAMS_SPMC_CVT_FUNCNAME(fname) ((WinAMS_SPMC_TFUNCNAME)((unsigned long)(fname) | 0xff0000))
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

26

カバレッジマスターwinAMS

マイコン：FMC16FX ③■ 対応策（続き②）② 圧縮埋め込みコードON「winAMS_SpmcDefine_Com.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* A user defines the type of the string of the file name *//* 【Reference】Mod WinAMS_SPMC_BASE_TFILENAME を char から char __far に変更*///#define WinAMS_SPMC_BASE_TFILENAME char/* base type=char *//* #define WinAMS_SPMC_BASE_TFILENAME signed char *//* base type=signed char *//* #define WinAMS_SPMC_BASE_TFILENAME unsigned char */ /* base type=unsigned char *//* 【Reference】Add WinAMS_SPMC_BASE_TFUNCNAME を char から char __far に変更*/#define WinAMS_SPMC_BASE_TFILENAME char __far/* base type=char __far */#define WinAMS_SPMC_TABLE_PTR_TATTR1#define WinAMS_SPMC_TABLE_PTR_TATTR2/* #define WinAMS_SPMC_TABLE_PTR_TATTR1 far */#define WinAMS_SPMC_TABLE_TATTR/* #define WinAMS_SPMC_TABLE_TATTR far *//* type tatt1 *name *//* type *tatt2 name *//* example *//* type tatt name[] *//* example *//* 【Reference】Mod fname を ROMミラーリング機能に合わせて変更 *///#define WinAMS_SPMC_CVT_TABLE_PTR(fname) (fname)/* table pointer convert *//* 【Reference】Mod ROMミラー機能選択レジスタ(ROMM)のミラーリングバンク選択ビット(bit7～bit4)によって、下記の *//* 0xff0000のff部分がf0～ffに変わります。環境に合わせて変更してください。（下記は、ミラーリングバンク選択ビットが *//* 「1111」(FFhバンク) ）の場合 */#define WinAMS_SPMC_CVT_TABLE_PTR(fname) ((WinAMS_SPMC_TFILENAME_PTR)((unsigned long)(fname) |0xff0000))/* example */#define WinAMS_SPMC_CONST const /* const table *//* #define WinAMS_SPMC_CONST */ /* not const table */Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

27

カバレッジマスターwinAMS【詳細①A】
文字列型定数のアドレスが正しく渡らない場合
マイコン：RL78（S2,S3コア）

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

28

カバレッジマスターwinAMS

マイコン：RL78（S2,S3コア） ①■ 文字列型定数のアドレスが正しく渡らない原因① スモールモデル若しくはミディアムモデルの場合、カバレッジ計測用関数の第１引数の文
字列型定数のアドレスには（A）ミラー先領域（F0ｘ0000～0ｘFFFFF）の下位16bitアドレス（0ｘ0000～0ｘFFFF）が渡る② 文字列型定数の実体は（B）ミラー元領域のアドレス（※0xn0000～0xnFFFF）に配置されている※S2,S3コアの場合、n=0x0~0x1,プロセッサ・モード・コントロール・レジスタ（PMC）の
MAA(LSB:0ビット)によって、ミラー元領域が変わる※S1コアは、MAAが0固定の為、ミラー元領域アドレスは、0x0000～0ｘ５EFFで、ミラー先域アドレスが、0ｘF8000～0ｘFDEFF固定になります。
③ カバレッジ計測用関数はデフォルト設定では、上記（A）の下位16bitアドレスを参照している為、MAA=1の場合に、計測対象の関数名が解析できない※MAA=0の場合は、対策しなくても、計測対象の関数名が解析■ 対応策① カバレッジ計測専用ビルド環境に含まれるカバレッジ計測用関数の定義を変更する② 上記でコンパイルしたカバレッジ計測用オブジェクトを利用する。

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

29

カバレッジマスターwinAMS

マイコン：RL78（S2,S3コア） ②■ 対応策（続き①）① 圧縮埋め込みコードOFF「winAMS_Spmc.c」を手動修正（赤文字＝デフォルト設定から変更する行）#ifdef WinAMS_SPMC_const_funcname
WinAMS_SPMC_BASE_TFUNCNAME const *volatile WinAMS_SPMC_funcname;#else/* 【Reference】Mod WinAMS_SPMC_funcname を long にして 3byteのポインタを受けれるように変更*///WinAMS_SPMC_BASE_TFUNCNAME *volatile WinAMS_SPMC_funcname;unsigned long volatile WinAMS_SPMC_funcname;#endif /* WinAMS_SPMC_const_funcname */「winAMS_SpmcDefine.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* 【Reference】Mod WINAMS_SPMC_USR_DEF_TFUNCNAME を0 から 1に変更*/#define WINAMS_SPMC_USR_DEF_TFUNCNAME 1/* 0:not define, 1:define */#if WINAMS_SPMC_USR_DEF_TFUNCNAME/* example */#define WinAMS_SPMC_BASE_TFUNCNAME char/* base type=char *//* #define WinAMS_SPMC_BASE_TFUNCNAME signed char *//* base type=signed char *//* #define WinAMS_SPMC_BASE_TFUNCNAME unsigned char */ /* base type=unsigned char *//* #define WinAMS_SPMC_BASE_TFUNCNAME char __far *//* base type=char __far *//* 【Reference】Mod fname を ミラーリング機能(PMC = 1 の場合)に合わせて変更 *///#define WinAMS_SPMC_CVT_FUNCNAME(fname) (fname)/* funcname pointer convert */#define WinAMS_SPMC_CVT_FUNCNAME(fname) ((unsigned long)(fname) & 0x00ffff | 0x010000)

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

30

カバレッジマスターwinAMS

マイコン：RL78（S2,S3コア） ③■ 対応策（続き②）② 圧縮埋め込みコードON「winAMS_Spmc_com.c」を手動修正（赤文字＝デフォルト設定から変更する行）#if __COMPILER_FCC907__
volatile WinAMS_SPMC_CONST WinAMS_SPMC_BASE_TFILENAME
WinAMS_SPMC_TABLE_PTR_TATTR1*WinAMS_SPMC_TABLE_PTR_TATTR2 WinAMS_SPMC_filename;#else/* 【Reference】Mod WinAMS_SPMC_funcname を long にして 3byteのポインタを受けれるように変更*//* WinAMS_SPMC_CONST WinAMS_SPMC_BASE_TFILENAME
WinAMS_SPMC_TABLE_PTR_TATTR1*WinAMS_SPMC_TABLE_PTR_TATTR2 volatile WinAMS_SPMC_filename; */unsigned long
volatile WinAMS_SPMC_funcname;//volatile long WinAMS_SPMC_filename; ↑上記で問題が解決しない場合は、こちらを利用する#endif /* __COMPILER_FCC907__ */「winAMS_SpmcDefine_com.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* 【Reference】Mod fname を ミラーリング機能(PMC = 1 の場合)に合わせて変更 *///#define WinAMS_SPMC_CVT_TABLE_PTR(fname) (fname)/* table pointer convert */#define WinAMS_SPMC_CVT_TABLE_PTR(fname) ((unsigned long)(fname) & 0x00ffff | 0x010000)

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

31

カバレッジマスターwinAMS【詳細①A】
文字列型定数のアドレスが正しく渡らない場合
マイコン：M16C

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

32

カバレッジマスターwinAMS

マイコン：M16C ①■ 文字列型定数のアドレスが正しく渡らない原因① 圧縮埋め込みコードがOFFの場合、カバレッジ計測用関数の第１引数の型が char *型でnear pointerとして、アドレス（A）が渡る※圧縮埋め込みコードがONの場合、第１引数の型が const char *型で far pointer② 文字列型定数の実体は異なるアドレス（B）（0xcnnnn～0xcnnnn）に配置されている③ カバレッジ計測用関数はデフォルト設定では、上記（A）を参照している為、計測対象の関数名が解析できない■ 対応策① カバレッジ計測専用ビルド環境に含まれるカバレッジ計測用関数の定義を変更する② 上記でコンパイルしたカバレッジ計測用オブジェクトを利用する。

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

33

カバレッジマスターwinAMS

マイコン：M16C ②■ 対応策（続き①）① 圧縮埋め込みコードOFF「winAMS_Spmc.h」を手動修正（赤文字＝デフォルト設定から変更する行）/* 【Reference】Add WinAMS_SPMC_const_funcname定義 near pointer から far pointer へ */#define WinAMS_SPMC_const_funcname#if WINAMS_SPMC_USR_DEF_TFUNCNAME#ifdef WinAMS_SPMC_const_funcname
typedef const WinAMS_SPMC_BASE_TFUNCNAME * WinAMS_SPMC_TFUNCNAME;#else
typedef WinAMS_SPMC_BASE_TFUNCNAME * WinAMS_SPMC_TFUNCNAME;#endif /* WinAMS_SPMC_const_funcname */#else#ifdef WinAMS_SPMC_const_funcname
typedef const char * WinAMS_SPMC_TFUNCNAME; /* 【Reference】near pointer から far pointer へ */#else
typedef char * WinAMS_SPMC_TFUNCNAME;#endif /* WinAMS_SPMC_const_funcname */#endif /* WINAMS_SPMC_USR_DEF_TFUNCNAME */Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

34

カバレッジマスターwinAMS【詳細①A】
文字列型定数のアドレスが正しく渡らない場合
マイコン：TX03（ARM Cortex-M3）

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

35

カバレッジマスターwinAMS

マイコン：TX03（ARM Cortex-M3） ①■ 文字列型定数のアドレスが正しく渡らない原因① カバレッジ計測用関数の第１引数の文字列型定数のアドレスには（A）RAM領域のアドレス（0xFFnnnn～0xFFnnnn）が渡る② 文字列型定数の実体はROM領域のアドレス（0xnnnn～0xnnnn）に配置されている③ カバレッジ計測用関数はデフォルト設定では、上記（A）を参照している為、計測対象の関数名が解析できない■ 対応策① スタートアップコマンドファイルで、ROM領域のデータをRAM領域にコピーする※シミュレータには、ミラー処理が実装されていない。
カバレッジ計測とは無関係なconst変数の参照時の問題回避も考慮して、コピー実施■スタートアップコマンドファイル（イメージ）; メモリ領域 0x1000～0x10ffの内容を0xFF2000～0xFF20ffへコピー
COPY MEMORY 0x1000#0x100 0xFF2000
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

36

カバレッジマスターwinAMS【詳細①B】
文字列型定数のアドレスが正しく渡らない場合
マイコン：e200zxxx系

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

37

カバレッジマスターwinAMS

マイコン：e200zxxx系 ①■ 文字列型定数のアドレスが正しく渡らない原因①① ベースレジスタ（R2【読み出し専用SDAポインタ（ROM化データ参照）】）が未設定（未初期化）で、カバレッジ計測用関数の第１引数の文字列型定数のアドレスに正しいアドレスが渡らない② カバレッジ計測用関数はデフォルト設定では、上記アドレスを参照している為、計測対象の関数名が解析できない■ 文字列型定数のアドレスが正しく渡らない原因②① ベースレジスタ（R13【読み取り・書き込み可変SDAポインタ（変数データ参照）】）が未設定（未初期化）で、カバレッジ計測用変数のアドレスが不正になる② カバレッジ計測用関数は上記変数を参照している為、計測対象の関数名が解析できない■ 対応策① テスト対象アプリケーションのスタートアップを実行して、ベースレジスタ（R2【読み出し専
用SDAポインタ】）、 （R13【読み取り・書き込み可変SDAポインタ】）を設定する。
■関連FAQ:【011_03】スタートアップルーチン、マイコン設定
http://www.gaio.co.jp/support/user/faq/winams/faq_011_03.html
Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

38

カバレッジマスターwinAMS【詳細①B】
文字列型定数のアドレスが正しく渡らない場合
マイコン：V850E2M / RH850

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

39

カバレッジマスターwinAMS

マイコン：V850E2M/RH850 ①■ 文字列型定数のアドレスが正しく渡らない原因① ベースレジスタ（R4【GP:グローバル・ポインタ】）が未設定（未初期化）で、カバレッジ計測
用変数のアドレスが不正になる② カバレッジ計測用関数は上記変数を参照している為、計測対象の関数名が解析できない■ 対応策① テスト対象アプリケーションのスタートアップを実行して、ベースレジスタ（R4【GP:グローバ
ル・ポインタ】 / R5【TP:テキスト・ポインタ】 / R30【EP:エレメント・ポインタ】 ）を設定する。
■関連FAQ:【011_03】スタートアップルーチン、マイコン設定
http://www.gaio.co.jp/support/user/faq/winams/faq_011_03.html

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

40

カバレッジマスターwinAMS【詳細②】
カバレッジ計測用変数が初期化される場合

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

41

カバレッジマスターwinAMS

カバレッジ計測用変数が初期化される場合■ 初期化される原因
埋め込みC1カバレッジ計測は可能。MC/DCカバレッジ計測が0%① テストドライバから、テスト対象関数をコールしているような構造で、テスト対象関数コール
前にMC/DCカバレッジ計測用の変数（※）を初期化している※WinAMS_SPMC_maxCondCnt, WinAMS_SPMC_maxCondNest② テストドライバから、テスト対象関数をコールしているような構造で、テストドライバ中のauto変数が大量で、スタック領域を超えて、MC/DCカバレッジ計測用の変数を破壊する■ 対応策① 1. 変数初期化前にMC/DCカバレッジ計測用の変数値を退避して、初期化後に値を戻してから、関数コールする
2. リンクパラメータを調整して、MC/DCカバレッジ計測用の変数値が初期化領域に配置されない埋め込みオブジェクトを生成する② 十分なスタック領域を確保できるようにSPを設定する

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

42

カバレッジマスターwinAMS【詳細③A】
マイコン、コンパイラ特有の問題
V850 / GHS

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

43

カバレッジマスターwinAMS

マイコン、コンパイラ特有の問題（V850 / GHS）
■ カバレッジ計測ができない原因
埋め込みC1カバレッジ計測は可能。MC/DCカバレッジ計測が不正結果① ビットフィールドを使用したif文条件判定で、テストCSVから、その変数の値にデータを設定しているが、意図通りの値が設定されずに（OMFコンバート時のLSB/MSB指定間違い）、正しい実行ルートを通過しない■ 対応策① コンパイラのバージョンに依って、デバッグ情報のLSB/MSBの捕らえ方が変わるので、正しいマイコンとOMFコンバータオプションを指定する※MPUが、 V850E2M/RH850 のOMFコンバータは、デフォルトが「-MSB」指定で、「-LSB」を指定できない
1. GHS【R3(LSB) / R7(LSB)】
OMF変換オプション:指定なし（-LSB）
1. コンパイルオプション:-cpu v850f
MPU:v850(GHS) / 型番:V850E/GP1シリーズ
2. GHS【R8.1.3以降（MSB）】 OMF変換オプション:-MSB
1.
2.
3.
4.
5.

コンパイルオプション:-cpu v850e1f
コンパイルオプション:-cpu v850e
コンパイルオプション:-cpu v850e2
コンパイルオプション:-cpu v850e2r
コンパイルオプション:-cpu v850e2v3

MPU:v850(GHS)/ 型番:V850E/GP1シリーズ
MPU:v850E2M(GHS) / 型番:V850E2Mシリーズ
MPU:v850E2M(GHS) / 型番:V850E2Mシリーズ
MPU:v850E2M(GHS) / 型番:V850E2Mシリーズ
MPU:v850E2M(GHS) / 型番:V850E2Mシリーズ

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

44

カバレッジマスターwinAMS【詳細③B】
マイコン、コンパイラ特有の問題
R32C / NC100

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

45

カバレッジマスターwinAMS

マイコン、コンパイラ特有の問題（R32C / NC100）■ カバレッジ計測ができない原因
埋め込みC1,MC/DCカバレッジ計測は可能。埋め込みなしC0カバレッジ
計測が0%① NC100の最適化の影響で、デバッグ情報が纏まり（※）、テスト対象とは無関係な関数まで計測対象となる※例）異なる関数名の複数の空関数が、1関数として、デバッグ情報が出力される■ 対応策① 1.最適化をOFFにしたオブジェクトを使用する
2.C0埋め込みONのオブジェクトを使用する

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

46

カバレッジマスターwinAMS

END■ 最新情報はWEBサイトから www.gaio.co.jp※会社名・商品名は各社の商標または登録商標です。
※本テキストの内容は、予告無く変更される場合があります。
※本書記載の誤りにより生ずる問題や損失に対して弊社は責任を負いません。
※本資料の無断転載、複写はお断りします。
ガイオ・テクノロジー株式会社
営業本部 サポート部〒140-0002
東京都品川区東品川2-2-4 天王洲ファーストタワー25階
ご質問はユーザーサポート 窓口まで
http://www.gaio.co.jp/support/support_entry.html

Copyright © 2015 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

47