Запишите выходное значение

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

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

  2. Получите ID типа данных использования выходного порта ssGetOutputPortDataType.

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

  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>

Похожие темы