Получите тип данных Input port

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

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

  1. Использовать ssGetInputPortDataType. Возвращается идентификатор типа данных порта входа.

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

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

В линиях 191 и 192, ssGetInputPortDataType используется для получения идентификатора типа данных для двух входных портов 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 );
}

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

Похожие темы