В рамках S-функции может потребоваться знать типы данных различных портов, параметры времени выполнения и DWorks. В каждом случае Вы должны будете получить ID типа данных типа данных и затем использовать функции из этого API, чтобы извлечь информацию о типе данных.
Например, предположим, что необходимо знать тип данных входного порта. Для этого
Использовать ssGetInputPortDataType. Возвращается идентификатор типа данных входного порта.
Используйте функции 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 );
}Функции, использованные выше, возвращают, подписаны или не подписаны типы данных, а также их длины слов, дробные откосы, экспоненты, общие откосы и смещения. Вместе эти величины дают полную информацию о типах данных с фиксированной точкой входных портов.