出力値の記述
出力信号の値を S-Function で出力端子に書き込む必要があるとします。出力値を指すポインターが適切に入力されるようにコードを記述する必要があります。これを行うには、以下の手順に従います。これらの手順は以下のコード例で使用されています。
出力信号の値を指す void ポインターを作成します。
関数
ssGetOutputPortDataType
を使用して、出力端子のデータ型 ID を取得します。データ型 ID を使用して、出力のストレージ コンテナーのタイプを取得します。
処理する出力のストレージ コンテナーのタイプごとにケースをもちます。各ケース内で、何らかの方法で以下の手順を実行する必要があります。
ストレージ コンテナーに従って正しいタイプのポインターを作成し、元の 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>