Предположим, что необходимо записать значение выходного сигнала в выходной порт в 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>