Предположим, что вам нужно записать значение выхода сигнала в выход порт в вашей S-функции. Необходимо записать код так, чтобы указатель на выход значение был правильно введен. Для этого можно использовать следующие шаги, которые приведены в коде примера ниже:
Создайте пустой указатель на значение выходного сигнала.
Получите идентификатор типа данных порта выхода используя ssGetOutputPortDataType
.
Используйте идентификатор типа данных, чтобы получить тип контейнера памяти выхода.
Иметь регистр для каждого типа выходного контейнера хранения, который необходимо обработать. В каждом случае вам потребуется выполнить следующее каким-либо образом:
Создайте указатель правильного типа в соответствии с контейнером хранилища и приведите исходный указатель на пустое поле в новый полностью введенный указатель (см. a
и c
).
Теперь можно записать значение, разыменовав новый, полностью набранный указатель мыши (см. b
и d
).
Для примера,
static void mdlOutputs(SimStruct *S, int_T tid) { <snip> void *pVoidOut = ssGetOutputPortSignal( S, 0 );(1)
DTypeId dataTypeIdY0 = ssGetOutputPortDataType( S, 0 );(2)
fxpStorageContainerCategory storageContainerY0 = ssGetDataTypeStorageContainCat( S, dataTypeIdY0 );(3)
switch ( storageContainerY0 ) { case FXP_STORAGE_UINT8:(4)
{ const uint8_T *pU8_Properly_Typed_Pointer_To_Y0;(a)
uint8_T u8_Stored_Integer_Y0;(b)
<snip: code that puts the desired output stored integer value in to temporary variable u8_Stored_Integer_Y0> pU8_Properly_Typed_Pointer_To_Y0 = (const uint8_T *)pVoidOut;(c)
*pU8_Properly_Typed_Pointer_To_Y0 = u8_Stored_Integer_Y0;(d)
} break; case FXP_STORAGE_INT8:(4)
{ const int8_T *pS8_Properly_Typed_Pointer_To_Y0;(a)
int8_T s8_Stored_Integer_Y0;(b)
<snip: code that puts the desired output stored integer value in to temporary variable s8_Stored_Integer_Y0> pS8_Properly_Typed_Pointer_To_Y0 = (const int8_T *)pVoidY0;(c)
*pS8_Properly_Typed_Pointer_To_Y0 = s8_Stored_Integer_Y0;(d)
} break; <snip>