Main Content

出力値の記述

出力信号の値を 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>

関連するトピック