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