Main Content

入力端子のデータ型の取得

S-Function 内では、さまざまな端子のデータ型、ランタイム パラメーター、および DWork を調べる必要がある場合があります。それぞれの場合で、データ型のデータ型 ID を取得し、この API から関数を使用してデータ型に関する情報を抽出する必要があります。

たとえば、入力端子のデータ型を調べる必要があるとします。これを行うには、以下の手順に従います。

  1. ssGetInputPortDataType を使用します。入力端子のデータ型 ID が返されます。

  2. API 関数を使用して、データ型に関する情報を抽出します。

次のコード例の行は、sfun_user_fxp_dtprop.c のものです。

199 行目と 200 行目で、S-Function の 2 つの入力端子のデータ型 ID を取得するために、ssGetInputPortDataType が使用されています。

dataTypeIdU0 = ssGetInputPortDataType( S, 0 );
dataTypeIdU1 = ssGetInputPortDataType( S, 1 );

さらに、ファイルでは、入力端子のデータ型に関する情報を取得するために、データ型 ID が API 関数で使用されています。205 ~ 226 行目では、入力端子のデータ型が single であるか double であるかを確認するために、チェックが行われています。

storageContainerU0 = ssGetDataTypeStorageContainCat( S,
dataTypeIdU0 );
storageContainerU1 = ssGetDataTypeStorageContainCat( S,
dataTypeIdU1 );
 if ( storageContainerU0 == FXP_STORAGE_DOUBLE ||
storageContainerU1 == FXP_STORAGE_DOUBLE )
{
/* Doubles take priority over all other rules.
* If either of first two inputs is double,
* then third input is set to double.
 */
dataTypeIdU2Desired = SS_DOUBLE;
}
else if ( storageContainerU0 == FXP_STORAGE_SINGLE ||
 storageContainerU1 == FXP_STORAGE_SINGLE )
 {
 /* Singles take priority over all other rules,
*	except doubles.
* If either of first two inputs is single
* then third input is set to single.
*/
 dataTypeIdU2Desired = SS_SINGLE;
  }
   else

227 ~ 244 行目では、single でも double でもない場合のデータ型に関する情報を取得するために、API の追加関数が使用されています。

{
    isSignedU0 = ssGetDataTypeFxpIsSigned( S, dataTypeIdU0 );
    isSignedU1 = ssGetDataTypeFxpIsSigned( S, dataTypeIdU1 );

    wordLengthU0 = ssGetDataTypeFxpWordLength( S, dataTypeIdU0 );
    wordLengthU1 = ssGetDataTypeFxpWordLength( S, dataTypeIdU1 );

    fracSlopeU0 = ssGetDataTypeFracSlope( S, dataTypeIdU0 );
    fracSlopeU1 = ssGetDataTypeFracSlope( S, dataTypeIdU1 );

    fixedExponentU0 = ssGetDataTypeFixedExponent( S,dataTypeIdU0 );
    fixedExponentU1 = ssGetDataTypeFixedExponent( S,dataTypeIdU1 );

    totalSlopeU0 = ssGetDataTypeTotalSlope( S, dataTypeIdU0 );
    totalSlopeU1 = ssGetDataTypeTotalSlope( S, dataTypeIdU1 );

    biasU0 = ssGetDataTypeBias( S, dataTypeIdU0 );
    biasU1 = ssGetDataTypeBias( S, dataTypeIdU1 );
}

上記で使用されている関数は、データ型が符号付きであるか符号なしであるかを返します。また、それらの語長、小数部の勾配、指数、総勾配、およびバイアスも返します。また、これらのデータは、入力端子の固定小数点データ型に関する完全な情報も示します。

関連するトピック