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

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

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

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

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

  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;

Похожие темы