ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS
【質問】
カバレッジマスターゼネラルを使用したいのですが、実際のマイコンとの仕様の差を把握したいと思います。カバレッジマスターゼネラルに内蔵されている汎用マイコン(General)のデータ型は、どのような仕様ですか?実際のマイコンとどのような差がありますか?
【回答】
カバレッジマスターゼネラルに内蔵されているマイコンシミュレータは、32ビットのRISC系のマイコンの構造を持ちます。マイコンのビット数を変更したり指定することはできません。
また、バイトオーダに関しては、リトルエンディアンまたはビッグエンディアンの選択が可能ですが、それ以外の処理系依存項目については、変更は出来ません。
そのため、特に16ビット、8ビットなどデータ幅の異なるマイコンのコードをテストする場合、マイコン構造の違いから来るデータ型の違いを把握しておく必要があります。
「int」型の記述がソースコードに有る場合、その変数のビット幅はマイコンによって異なります。32ビットマイコンでは int = 32bit(long型) 、 16ビットマイコンでは int=16bit(short型) です。例えば、16ビットのマイコンコードをテストする際には、int型の変数は、予め16ビットを明示するshort型で変数を定義しておく必要があります。
ゼネラルの言語処理(実行コードを生成する際の内蔵コンパイラの仕様)は、ヘルプマニュアルに記載されています。
Windowsスタート → WinAMS → カバレッジマスターGeneralヘルプ の「言語仕様」のページ
(上記マニュアルからの抜粋)
言語仕様
識別子の有効文字数
識別子の有効長: 250文字(250文字を超える識別子でもビルドできますが、C++言語の場合、カバレッジマスター
winAMSでその識別子を参照できなくなります。その場合、テストドライバを作成して、その識別子への値の代入、参照を行ってください)
データタイプ
変数タイプ | サイズ | 最小値 | 最大値 |
char unsigned char |
8bit 8bit |
-128 0 |
+127 +255 |
short unsigned short short int unsigned short int |
16bit 16bit 16bit 16bit |
-32768 0 -32768 0 |
+32767 +65535 +32767 +65535 |
int unsigned int long unsigned long |
32bit 32bit 32bit 32bit |
-2147483648 0 -2147483648 0 |
+2147483647 +4294967295 +2147483647 +4294967295 |
long long unsigned long long |
64bit 64bit |
-9223372036854775808 0 |
+9223372036854775807 +18446744073709551615 |
float double long double |
32bit 64bit 64bit |
-1e37 -1e306 -1e306 |
+1e37 +1e306 +1e306 |
signedビットフィールド unsignedビットフィールド |
1 〜 32bit | -2^(W-1) 0 |
2^(W-1) - 1 2^(W) - 1 |
enum ポインタ |
32bit 32bit |
--- 0 |
--- 0xffffffff |
備考 W(width)は指定されたビットの幅を示します
補足:boolはintと同じです。
ビットフィールドは、32ビット境界でアサインされます
_Bool(C99)はcharと同じです。
Generalを使用した場合、MISRA-C解析時のintサイズは32ビット固定となります。
ビットフィールド
ビットフィールドでは32bitの境界を越えてフィールドを定義することはできません。
したがって,ビットフィールドのメンバの最大幅は32bitです。
また,メンバが32bit境界を越えるときは次の32bit境界に整合されます。
ビットフィールドは定義順にMSBから割り当てられますが、LSBにつめて割り当てられるため、空きビットがMSB側に取られます。
以下の例は4つのメンバからなる構造体を定義していますが,この場合メモリ上では下図のように,割り当てられます。
|
【ビットフィールド割り当てイメージ】
浮動小数点数
Generalで使用される浮動小数点数の内部フォーマットは,IEEE754に準拠しています。
また,Generalでは拡張倍精度(80ビット)の浮動小数点数はサポートしていません。
アライメント(バウンダリ調整)
【アライメント調整値一覧】変数の宣言場所 | 変数の型 | アライメント調整値 |
スタティック記憶クラス グローバル記憶クラス |
char short int long float long long double ポインタ 構造体・共用体 配列 |
1 2 4 4 4 4 4 4 4 型に依存 |
オート記憶クラス,引数 | 全型 | 4 |
構造体のメンバ | char short int long float long long double ポインタ 構造体・共用体 配列 |
1 2 4 4 4 4 4 4 4 型に依存 |
Generalコード生成では、#pragma pack(n)とGNUのpacked属性およびaligned(n)属性を無視します。このため、sizeof()の計算ではこれらの指定がないものとして計算します。