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

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

Похожие темы