主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

マルチタスク実行のモデル化

マルチタスクモードと疑似マルチタスクモード

マルチタスクモードで周期的タスクを実行すると,既定の設定では,サンプルレートが最も速いブロックは優先度が最も高いタスクによって実行され,サンプルレートが2番目のブロックは優先度が2番目のタスクによって実行され,以降同様に繰り返されます。優先度が低いタスクは,優先度が高い複数のタスクの処理の間に処理されます。このように,効率的にプログラムが実行されます。

タスクが周期的ではなく非同期の場合,サンプルレートとタスクの優先度に必ずしも関係性はなく,優先度が最も高いタスクのサンプルレートが最も速いとは限りません。非同期タスクの優先順位を指定するには,异步中断ブロックと任务同步ブロックを使用します。優先度の数字の意味を切り替えるには,モデルコンフィギュレーションパラメーター[優先順位の値が高いほどタスクの優先順位が高いことを示す]を選択または選択解除します。

マルチタスク環境(すなわち,リアルタイムオペレーティングシステムを使用している環境)では,個々のタスクを定義して,優先度を割り当てることができます。ベアメタルターゲットハードウェア(すなわち,リアルタイムオペレーティングシステム以外のシステムを使用している環境)では,個別のタスクを作成することはできません。ただし,生成されたアプリケーションモジュールでは,割り込みのオーバーラップとプログラムによるコンテキストスイッチを使用する効果的なマルチタスクの実行スキームを実装します。

すなわち,ある割り込みの処理中に別の割り込みが発生する場合があるということです。この場合,現在の割り込みがプリエンプトされ,浮動小数点演算装置(FPU)のコンテキストが保存されます。優先度の高い割り込みが,優先度の高い(つまり,より高速のサンプルレートの)コードを実行します。割り込みが完了すると,プリエンプトされたISRに制御権が戻ります。

次の図は,マルチタスク,疑似マルチタスクおよびシングルタスク環境でコードジェネレーターによってマルチレートシステムのタスクのタイミングが処理される様子を示したものです。

次の図は,割り込みのオーバーラップによる疑似マルチタスクの実装を示したものです。この場合,割り込み0は割り込み1,2,および3が完了するまで返されません。

マルチタスク実行のためのプログラムのビルド

マルチタスク実行を使用するには,モデルコンフィギュレーションパラメーター(各離散レートを個別のタスクとして扱う)を選択します。このパラメーターは,[ソルバータイプ](固定ステップ]に設定した場合にのみ有効です。[自動]モードが選択されると,モデルに2つ以上の異なるサンプル時間が含まれている場合,マルチタスク環境が指定されます。モデルに連続サンプル時間および離散サンプル時間が含まれ,固定ステップサイズが離散サンプル時間と等しい場合,シングルタスクモードで実行されます。

マルチタスクモデルの実行

モデルの連続部が離散部と異なるレートで実行される場合,またはモデルが異なるサンプルレートのブロックをもつ場合,仿金宝app真软件®エンジンは各ブロックに“タスク識別子”(tid)を割り当て,ブロックとそのブロックのサンプルレートで実行するタスクとを関連付けます。

[モデルコンフィギュレーションパラメーター]ダイアログボックスの[ソルバー]ペインでサンプルレートとその制約を設定します。コードを生成するには,ソルバータイプに(固定ステップ]を選択します。使用できるサンプルレートには一定の制約があります。

  • ブロックのサンプルレートは,基準の(つまり最も速い)サンプル期間の整数倍でなければなりません。

  • モデルコンフィギュレーションパラメーター(周期的なサンプル時間の制約](制約なし]に設定すると,ベースサンプル期間はパラメーター(固定ステップサイズ]の設定で決定されます。

  • パラメーター(周期的なサンプル時間の制約][サンプル時間を制約する]に設定すると,基本レートの固定ステップサイズはパラメーター[サンプル時間のプロパティ]で指定するサンプル時間行列の最初の要素になります。モデル例rtwdemo_mrmtbb[ソルバー]ペインに例を示します。

  • 連続ブロックは基本サンプルレートで実行する積分アルゴリズムを使用して実行します。モデルコンフィギュレーションパラメーター(周期的なサンプル時間の制約](制約なし]に,パラメーター(固定ステップサイズ][自動]に設定した場合にのみ,ベースサンプル期間はモデルのレートの最大公約数です。

  • モデルの連続部と離散部が異なるレートで実行できるのは,離散部のレートが連続部のレートと同じかそれより遅く,基本サンプルレートの整数倍である場合のみです。

マルチタスク実行

この例では,リアルタイムおよびシミュレーションにおける固定ステップソルバーを使用した単純なマルチレートモデルの実行について説明します。モデルコンフィギュレーションパラメーター(各離散レートを個別のタスクとして扱う)を設定することで決定される,シングルタスクモードとマルチタスクモード両方の操作が考慮されます。

モデルの例を次の図に示します。ブロック線図のラベルに従い、モデルの A から F までの 6 つのブロックについて説明します。

ブロックの実行順序(各ブロックの右上に表示)は,ブロックF, E,およびDに高い優先度が割り当てられていることが強制的に示されています。示された順序は,このモデルで考えられる有効な実行順序の1つです。詳細については,動的システムのシミュレーションの段階を参照してください。

実行順序は,ブロック間のデータ依存関係によって決定します。リアルタイムシステムでは,実行順序によって,指定した時間間隔またはタスク内でブロックが実行される順序が決定されます。この説明では,モデルの実行順序は,タスクに対するブロックの計算の割り当てやタスク実行のスケジューリングに関連付けられているため,既知の順序として扱います。

メモ:

この節の説明とタイミング図は,速度过渡ブロックが既定の設定(保護)モードで使用されているという前提に基づいています。すなわち,ブロックパラメーター[データ転送中の整合性を確保)[確定的にデータ転送を確保(最大遅延))は選択されています。

この例では,モデルコンフィギュレーションパラメーター[タスクモード][マルチタスキング]に設定される場合に前述のモデルの実行を検討します。ブロック計算は、レートで優先度が指定され、2 つのタスクで実行されます。

  • より低速のタスクは,優先度が低く,毎秒実行されるようにスケジュールされます。これを”“1秒タスクといいます。

  • より高速のタスクは,優先度が高く,毎10秒回実行されるようにスケジュールされます。これを“0.1秒タスク”といいます.0.1秒タスクは,1秒タスクをプリエンプトする場合があります。

次の表に,モデルの各ブロックについて,実行順序,ブロック実行時のタスク,およびブロックに計算の出力または更新が含まれているかどうかを示します。ブロック一およびBは離散状態が存在しないため,更新の計算は含まれません。

マルチタスク実行時のブロックのタスク割り当て

ブロック
(実行順序)

タスク

出力

更新

E

0.1秒タスク

Y

Y

F

0.1秒タスク

Y

Y

D

率过渡ブロックは,端子ベースのサンプル時間を使用します。
出力は,0.1秒タスクの出力端子サンプル時間で実行されます。
更新は1秒タスクの入力端子サンプル時間で実行されます。
端子ベースのサンプル時間の詳細については,参照モデルのサンプル時間を参照してください。

Y

Y

一个

0.1秒タスク

Y

N

B

率过渡ブロックは,端子ベースのサンプル時間を使用します。
出力は,0.1秒タスクの出力端子サンプル時間で実行されます。
端子ベースのサンプル時間の詳細については,参照モデルのサンプル時間を参照してください。

Y

N

C

1秒タスク

Y

Y

リアルタイムマルチタスク実行

次の図は,生成コードがリアルタイムシステムに配布されたときの[マルチタスク]ソルバーモードの計算のスケジューリングを示しています。生成プログラムは10 Hzタイマーからの割り込みを制御しながら,2つのタスクをリアルタイムで実行中です。

マルチタスク実行のシミュレーション

次の図は,同じモデルの[マルチタスク]ソルバーモードの仿金宝app真软件実行を示しています。この場合,金宝app仿真软件エンジンは,マルチタスクをシミュレートして,1つの実行のスレッドでブロックを実行します。プリエンプションは発生しません。

関連するトピック