Следующий пример кода от линий 243 - 261 из sfun_user_fxp_asr.c дает пример использования типа данных входа к вашей S-функции, чтобы вычислить тип выходных данных. Заметьте это в этом коде
Выход подписывается или без знака, чтобы совпадать с входом (a).
Выход является тем же размером слова как вход (b).
Дробная продолжительность выхода зависит от входной длины части и количества рабочих смен (c).
#define MDL_SET_INPUT_PORT_DATA_TYPE
static void mdlSetInputPortDataType(SimStruct *S, int port,
DTypeId dataTypeIdInput)
{
if ( isDataTypeSupported( S, dataTypeIdInput ) )
{
DTypeId dataTypeIdOutput;
ssSetInputPortDataType( S, port, dataTypeIdInput );
dataTypeIdOutput = ssRegisterDataTypeFxpBinaryPoint(
S,
ssGetDataTypeFxpIsSigned( S, dataTypeIdInput ), (a)
ssGetDataTypeFxpWordLength( S, dataTypeIdInput ), (b)
ssGetDataTypeFractionLength( S, dataTypeIdInput )
- V_NUM_BITS_TO_SHIFT_RGHT, (c)
0 /* false means do NOT obey data type override
setting for this subsystem */ );
ssSetOutputPortDataType( S, 0, dataTypeIdOutput );
}
}