このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
プログラムによるタイマーへのアクセス
S-Function 用タイマー プログラミング インターフェイスについて
絶対時間および経過時間タイマーの提供する効率性を活用するために使用できる S-Function 用のプログラミング インターフェイスが利用可能です。SimStruct マクロがシミュレーションをサポートします。TLC ライブラリ関数はインライン化コードの生成をサポートします。
タイマー用のコードを生成してタイマーを使用ために、S-Function では、
mdlInitializeSampleTimeでssSetNeedAbsoluteTimeまたはssSetNeedElapseTimeを呼び出し、絶対時間または経過時間のタイマーを使用する必要性を登録しなければなりません。絶対時間を読み取るが、これらのマクロを使用する必要性を登録しない既存の S-Function は、期待どおりの動作を続けますが、生成されるコードの効率は下がります。
シミュレーション中の S-Function からタイマーへのアクセス
SimStruct マクロのサンプル時間カテゴリを使用すると、シミュレーション中に S-Function から絶対時間および経過時間のタイマーにアクセスできます。これらのマクロでは、SimStruct *S 引数は、呼び出し側 S-Function の simstruct のポインターです。
| 目的 | SimStruct マクロ |
|---|---|
| 絶対時間 | |
| S-Function が絶対時間データを要求していることを登録し、絶対時間カウンターを S-Function 実行時のレートに割り当てます (カウンターが割り当てられていない場合)。 | ssSetNeedAbsoluteTime |
| S-Function が絶対時間を要求していることが登録されているかどうかを確認します。 | ssGetNeedAbsoluteTime |
| 指定したタスクの絶対時間を取得します。 | ssGetTaskTime |
| 経過時間 | |
| S-Function が経過時間データを要求していることを登録し、経過時間カウンターを S-Function 実行時のトリガーされたサブシステムに割り当てます (カウンターが割り当てられていない場合)。 | ssSetNeedElapseTime |
| S-Function が経過時間を要求していることが登録されているかどうかを確認します。 | ssGetNeedElapseTime |
| S-Function に関連付けられた経過時間カウンターの値を取得します。 | ssGetElapseTime |
| S-Function に関連付けられた経過時間カウンターのデータ型を取得します。 | ssGetElapseTimeCounterDtype |
| S-Function に関連付けられた経過時間カウンターの分解能 (サンプル時間) を取得します。 | ssGetElapseTimeResolution |
| S-Function に関連付けられた経過時間カウンターの整数値を取得します。 | ssGetElapseTimeCounter |
固定小数点演算の経過時間の値が必要なブロックには ssGetElapseTimeCounter を使用します。カウンター サイズが 64 ビットの場合、この値は、2 つの 32 ビットワードの配列として返され、低順位ワードはより小さなアドレスで格納されます。
返されたカウンター値にアクセスする方法を特定するには、次のコードのように、関数 ssGetElapseTimeCounterDtype を呼び出して、カウンターのデータ型を取得します。
int *y_dtype;
ssGetElapseTimeCounterDtype(S, y_dtype);
switch(*y_dtype) {
case SS_DOUBLE_UINT32:
{
uint32_T dataPtr[2];
ssGetElapseTimeCounter(S, dataPtr);
}
break;
case SS_UINT32:
{
uint32_T dataPtr[1];
ssGetElapseTimeCounter(S, dataPtr);
}
break;
case SS_UINT16:
{
uint16_T dataPtr[1];
ssGetElapseTimeCounter(S, dataPtr);
}
break;
case SS_UINT8:
{
uint8_T dataPtr[1];
ssGetElapseTimeCounter(S, dataPtr);
}
break;
case SS_DOUBLE:
{
real_T dataPtr[1];
ssGetElapseTimeCounter(S, dataPtr);
}
break;
default:
ssSetErrorStatus(S, "Invalid data type for elaspe time
counter");
break;
}実際の経過時間を使用する場合は、関数 ssGetElapseTime を呼び出して、経過時間に直接アクセスします。カウンター値を取得して、経過時間を計算する必要はありません。
double *y_elapseTime; . . . ssGetElapseTime(S, elapseTime)
インライン化 S-Function 用に生成されたコードからタイマーへのアクセス
TLC 関数のサンプル時間カテゴリを使用すると、インライン化 S-Function 用に生成されたコードで絶対時間および経過時間のタイマーにアクセスできます。
| 目的 | TLC 関数 |
|---|---|
| 絶対時間 | |
| S-Function コードが実行されるタスクの絶対時間を取得します。 | LibGetTaskTimeFromTID(block) |
| タスクの絶対時間を取得します。 | LibGetTaskTime(tid) |
| 整数のタスク時間を取得します。これはタスク タイマーの現在のクロック刻みです。 | LibGetClockTick(tid) |
| 整数のタスク時間の分解能を取得します。 | LibGetClockTickStepSize(tid) |
| クロック刻みのデータ型を取得します。 | LibGetClockTickDataTypeId(tid) |
| 経過時間 | |
| 呼び出し側のブロックを含むサブシステムが最後の実行を開始してから経過した時間を取得します。 | LibGetElapseTime(system) |
| 経過時間カウンターの整数値を取得します。 | LibGetElapseTimeCounter(system) |
| 経過時間カウンターのデータ型を取得します。 | LibGetElapseTimeCounterDTypeId(system) |
| 経過時間カウンターの分解能を取得します。 | LibGetElapseTimeResolution(system) |