Получите тип данных входного порта

В вашей S-функции вы можете должны быть знать типы данных различных портов, параметров периода выполнения и DWorks. В каждом случае необходимо будет получить ID типа данных типа данных, и затем использовать функции от этого API, чтобы извлечь информацию о типе данных.

Например, предположите, что необходимо знать тип данных входного порта. Для этого,

  1. Используйте ssGetInputPortDataType. ID типа данных входного порта возвращен.

  2. Используйте API-функции, чтобы извлечь информацию о типе данных.

Следующие строки примера кода от sfun_user_fxp_dtprop.c.

В строках 191 и 192, ssGetInputPortDataType используется, чтобы получить ID типа данных для двух входных портов S-функции:

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

Далее на в файле, идентификаторы типа данных используются с 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, дополнительные API-функции используются, чтобы получить информацию о типах данных, если они ни single, ни double:

{
    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 );
}

Функции использовали выше возврата, подписываются ли типы данных или без знака, а также их размеры слова, дробные наклоны, экспоненты, общие наклоны и смещения. Вместе, эти количества дают полную информацию о типах данных с фиксированной точкой входных портов.

Похожие темы