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

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

Похожие темы