exponenta event banner

Запись выходного значения

Предположим, что необходимо записать значение выходного сигнала в выходной порт в S-функции. Необходимо написать код так, чтобы указатель на выходное значение был правильно введен. Для этого можно использовать следующие шаги, которые следуют в приведенном ниже примере кода:

  1. Создайте указатель на значение выходного сигнала.

  2. Получение идентификатора типа данных выходного порта с помощью ssGetOutputPortDataType.

  3. Используйте идентификатор типа данных для получения типа контейнера хранения выходных данных.

  4. Иметь регистр для каждого типа выходного контейнера, который требуется обработать. В каждом случае необходимо выполнить следующее:

    • Создайте указатель правильного типа в соответствии с контейнером хранения и поместите исходный указатель пустоты в новый полностью введенный указатель (см. 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>

Связанные темы