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