メインコンテンツ

出力値の記述

出力信号の値を S-Function で出力端子に書き込む必要があるとします。出力値を指すポインターが適切に入力されるようにコードを記述する必要があります。これを行うには、以下の手順に従います。これらの手順は以下のコード例で使用されています。

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

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

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

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

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

参考

トピック