メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

キャスト モード

変数のデータ型のキャスト方法

モデル コンフィギュレーション ペイン: [コード生成] / [コード スタイル]

説明

コード ジェネレーターによる変数のデータ型のキャスト方法を指定します。

設定

ノミナル値 (既定値) | 標準準拠 | 明示的

既定の設定: ノミナル

ノミナル

既定の C コンパイラのデータ型キャストを使用するコードを生成します。この設定を使用すると、明示的なキャストを想定するコンパイラで警告につながる可能性がある不要な型変換が削除されます。

標準準拠

データ型キャストが MISRA™ 標準に準拠するコードを生成します。

[キャスト モード][標準準拠] に設定すると、オペランドが符号付き型の場合に MISRA C:12 Rule 10.1 を満たすように、ビット単位の XOR 演算を生成コードで関係演算に置き換えることができます。

明示的

データ型の値を明示的にキャストするコードを生成します。

すべて展開する

[キャスト モード] を異なる値に設定し、それぞれの場合の生成コードでデータ型キャストを比較します。

次の生成コードは、[キャスト モード] に既定値の [ノミナル] を使用して生成されたものです。

void EmbeddedCoderIntro_step(void)
  {
    boolean_T rtb_equal_to_count;
    rtDWork.X++;
    rtb_equal_to_count = (rtDWork.X != 16);	
    if (rtb_equal_to_count && (rtPrevZCSigState.Amplifier_Trig_ZCE != POS_ZCSIG))
     { rtY.Output = rtU.Input << 1;
     }

同じコードを [キャスト モード][標準準拠] に設定して生成すると次のようになります。

void EmbeddedCoderIntro_step(void)
	{
	  boolean_T rtb_equal_to_count;
	  rtDWork.X = (uint8_T)((uint32_T)rtDWork.X + 1U);
	  rtb_equal_to_count = ((int32_T)rtDWork.X != 16);
	  if (rtb_equal_to_count && ((uint32_T)rtPrevZCSigState.Amplifier_Trig_ZCE !=
	       POS_ZCSIG)) {
	    rtY.Output = rtU.Input << 1U;
	  }
  

メモ

モデル コンフィギュレーション パラメーター [2 のべき乗での乗算を符号付きのビット単位シフトに置換] が選択されているため、式 rtY.Output = rtU.Input << 1U は MISRA C:12 Rule 10.1 に準拠していません。詳細については、2 のべき乗での乗算を符号付きのビット単位シフトに置換を参照してください。

コンフィギュレーション パラメーター [キャスト モード] の設定によっては、オペランドが符号付き型の場合に MISRA C:12 Rule 10.1 を満たすように、ビット単位の XOR 演算を生成コードで関係演算に置き換えることができます。たとえば、次のモデルから [キャスト モード][Nominal][Standard compliant] にそれぞれ設定してコードを生成します。

Bitwise XOR block with two inputs and one output.

// Model step function (casting mode set to Nominal)
void step(void)
{rtY.Out3 = (boolean_T)((int32_T)(rtU.In1 != 0.0F) ^ (int32_T)(rtU.Inport1 !=
    0.0F));
}
// Model step function (Casting modes set to Standard Compliant)
void step(void)
{  rtY.Out3 = ((rtU.In1 != 0.0F) != (rtU.Inport1 != 0.0F));
}
ここで、パラメーター rtU.In1rtU.Inport1 は single の符号付き型です。これらのオペランドに対してビット単位の XOR (^) 演算を実行すると、MISRA C:12 Rule 10.1 に違反します。この違反を回避するために、[キャスト モード][Standard compliant] に設定されている場合、コード ジェネレーターはビット単位の XOR (^) 演算を生成コードで不等式 (!=) に置き換えます。

同じコードを [キャスト モード][明示的] に設定して生成すると次のようになります。

void EmbeddedCoderIntro_step(void)
{
    boolean_T rtb_equal_to_count;
    rtDWork.X = (uint8_T)((uint32_T)(int32_T)rtDWork.X + 1U);
    rtb_equal_to_count = (boolean_T)((int32_T)rtDWork.X != 16);
    if (((int32_T)rtb_equal_to_count) && ((int32_T)
    rtPrevZCSigState.Amplifier_Trig_ZCE != (int32_T)POS_ZCSIG)) {
    rtY.Output = rtU.Input << 1;
}
  

推奨設定

アプリケーション設定
デバッグ影響なし
トレーサビリティ影響なし
効率性影響なし
安全対策影響なし

プログラムでの使用

パラメーター: CastingMode
型: 文字ベクトル
値: 'Nominal' | 'Standards' | 'Explicit'
既定の設定: 'Nominal'

バージョン履歴

R2014b で導入