Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

入力値の解釈

S-Function で使用する入力端子の信号の値を取得する必要があるとします。入力値を指すポインターが正しく入力され、入力端子から読み取られた値が正しく解釈されるように、コードを記述する必要があります。これを行うには、次のコード例に示されている以下の手順に従います。

  1. 入力信号の値を指す void ポインターを作成します。

  2. 関数 ssGetInputPortDataType を使用して、入力端子のデータ型 ID を取得します。

  3. データ型 ID を使用して、入力のストレージ コンテナーのタイプを取得します。

  4. 処理する入力ストレージ コンテナーのタイプごとにケースをもちます。各ケース内で、何らかの方法で以下の手順を実行する必要があります。

    • ストレージ コンテナーに従って正しいタイプのポインターを作成し、元の void ポインターを完全に型指定された新しいポインターにキャストします (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;

関連するトピック