Интерпретируйте входное значение

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

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

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

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

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

    • Создайте указатель правильного типа согласно контейнеру устройства хранения данных и бросьте исходный пустой указатель в новый полностью введенный указатель (см. a и c).

    • Можно теперь сохранить и использовать значение путем разыменования нового, полностью введенного указателя (см. b и d).

Например,

static void mdlOutputs(SimStruct *S, int_T tid)
{
    const void *pVoidIn = 
					(const void *)ssGetInputPortSignal( S, 0 ); (1)

    DTypeId dataTypeIdU0 = ssGetInputPortDataType( S, 0 ); (2)
      
    fxpStorageContainerCategory storageContainerU0 =
					ssGetDataTypeStorageContainCat( S, dataTypeIdU0 ); (3)

    switch ( storageContainerU0 )
    {
      case FXP_STORAGE_UINT8: (4)
        {
            const uint8_T *pU8_Properly_Typed_Pointer_To_U0; (a)

            uint8_T u8_Stored_Integer_U0; (b)

            pU8_Properly_Typed_Pointer_To_U0 = 
					(const uint8_T  *)pVoidIn; (c)

            u8_Stored_Integer_U0 = 
					*pU8_Properly_Typed_Pointer_To_U0; (d)
            
            <snip: code that uses input when it's in a uint8_T>
        }
        break;

      case FXP_STORAGE_INT8: (4)
        {
            const int8_T *pS8_Properly_Typed_Pointer_To_U0; (a)

            int8_T s8_Stored_Integer_U0; (b)

            pS8_Properly_Typed_Pointer_To_U0 = 
					(const int8_T  *)pVoidIn; (c)

            s8_Stored_Integer_U0 = 
					*pS8_Properly_Typed_Pointer_To_U0; (d)
            
            <snip: code that uses input when it's in a int8_T>
        }
        break;

Похожие темы