このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Task Sync
下流の Function-Call Subsystem または Stateflow チャートのコードを、RTOS 例 (VxWorks) のタスクを発生させることによって実行する
ライブラリ:
Simulink Coder /
Asynchronous /
Interrupt Templates
説明
Task Sync ブロックは Function-Call Subsystem または Stateflow® チャートを呼び出す RTOS 例 (VxWorks) タスクを発生させます。通常 Task Sync ブロックは Async Interrupt ブロックと Function-Call Subsystem ブロックまたは Stateflow チャートの間に配置します。または、Task Sync ブロックの接続先を、関数呼び出しとして構成されたイベント Output to Simulink
が含まれる Stateflow ブロック線図の出力端子にすることもできます。
Task Sync ブロックの動作は以下のとおりです。
RTOS (VxWorks) システム呼び出し
taskSpawn
を使用して独立したタスクを発生させます。タスクがアクティブになると下流の Function-Call Subsystem コードまたは Stateflow チャートを呼び出します。ブロックはモデルの終了時にtaskDelete
を呼び出してタスクを削除します。接続されたサブシステムをブロックの実行と同期させるセマフォを作成します。
発生したタスクを無限
for
ループでラップします。ループでは発生したタスクがsemTake
を使用してセマフォをリッスンします。semTake
への最初の呼び出しではNO_WAIT
が指定されます。この設定により、Function-Call Subsystem またはチャートが完了する前に 2 番目のsemGive
が発生したかどうかがタスクで判断されます。このシーケンスは割り込みレートが速すぎるか、タスクの優先順位が低すぎることを示します。同期コード (たとえば
semGive()
) を生成します。このコードによって発生したタスクが実行されます。次にタスクは接続された Function-Call Subsystem コードを呼び出します。同期コードは割り込みレベルで実行できます。Async Interrupt ブロックと Task Sync ブロックの間の接続によってこの動作が達成され、ISR 内で Task Sync ブロックの実行がトリガーされます。下流のアルゴリズム コードのブロックに必要な場合は絶対時間を提供します。絶対時間は Async Interrupt ブロックによって維持されるタイマー、または Task Sync ブロックに関連付けられたタスクによって維持される独立したタイマーのいずれかから提供されます。
アプリケーションの設計時に、Task Sync ブロックに接続される下流の Function-Call Subsystem のためにタイマーおよび信号入力値をいつ取得するかを検討してください。既定の設定では RTOS (VxWorks) がタスクをアクティブにするときに時間および入力データが読み取られます。この場合、データ (入力および時間) はタスクに同期します。[このタスクのデータ転送を呼び出し側タスクと同期] オプションを選択し、Task Sync ブロックのドライバーが Async Interrupt ブロックである場合は、割り込みが発生したときに (つまり ISR 内で) 時間および入力データが読み取られます。この場合、データは Task Sync ブロックの呼び出し元と同期されます。
メモ
シミュレーションとコード生成用に Interrupt Templates ブロック ライブラリ (Async Interrupt と Task Sync) 内のブロックを使用します。これらのブロックは、ターゲット環境でカスタム ブロックを開発するのに役立つ開始点の例を提供します。
端子
入力
出力引数
パラメーター
バージョン履歴
R2006a で導入