Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Async Interrupt

下流のサブシステムまたは Task Sync ブロックを実行する Versa Module Eurocard (VME) 割り込みサービス ルーチン (ISR) を生成

  • ライブラリ:
  • Simulink Coder / Asynchronous / Interrupt Templates

説明

Async Interrupt ブロックは RTOS 例 (VxWorks®) で指定した VME 割り込みレベルごとに以下のいずれかを呼び出す割り込みサービス ルーチン (ISR) を生成します。

  • Function Call Subsystem

  • Task Sync ブロック

  • 関数呼び出し入力イベント用に構成された Stateflow® チャート

メモ

このブロックは vxlib1 ライブラリ (Async InterruptTask Sync) でシミュレーションとコード生成に使用できます。これらのブロックは、ターゲット環境でカスタム ブロックを開発するのに役立つ開始点の例を提供します。

前提条件と制限

  • このブロックは 1 ~ 7 個の VME 割り込みをサポートしています。

  • このブロックでは次の RTOS (VxWorks) システム呼び出しを使用します。

    sysIntEnable
    sysIntDisable
    intConnect
    intLock
    intUnlock
    tickGet

パフォーマンスについて

割り込みレベルで大規模なサブシステムが実行されると、システム内で優先度が同じか、低い割り込みの割り込み応答時間に大きく影響します。一般的に、ISR はできるだけ短くすることを推奨します。少数のブロックが含まれる Function-Call Subsystem だけを Async Interrupt ブロックに接続します。

大きなサブシステムの場合は Task Sync ブロックを使用して Function-Call Subsystem の実行を RTOS タスクに同期させることを推奨します。Async Interrupt ブロックと Function-Call Subsystem の間に Task Sync ブロックを配置します。Async Interrupt ブロックは Task Sync ブロックを ISR として使用します。ISR は、同期セマフォをタスクにリリースし (関数 semGive を実行し)、割り込みレベルからすぐに返されます。RTOS 例 (VxWorks) は、タスクをスケジュールし、実行します。Task Sync ブロックの説明を参照してください。

端子

入力

すべて展開する

シミュレーションする割り込みソース。

出力引数

すべて展開する

以下に対する制御信号

  • Function-Call Subsystem

  • Task Sync ブロック

  • 関数呼び出し入力イベント用に構成された Stateflow チャート

パラメーター

すべて展開する

インストールされる割り込みの VME 割り込み番号の配列。有効な範囲は 1..7 です。

Async Interrupt ブロック出力信号の幅は指定した VME 割り込み番号の数に対応します。

メモ:

1 つのモデルに 1 つを超える Async Interrupt ブロックを含めることができます。ただし、1 つを超えた Async Interrupt ブロックを使用する場合は各ブロックで指定された VME 割り込み番号が重複しないようにしてください。

[VME interrupt number(s)] パラメーターに入力された VME 割り込み番号に対応する一意の割り込みベクトル オフセット番号の配列。Stateflow ソフトウェアはオフセットを RTOS (VxWorks) 呼び出し intConnect(INUM_TO_IVEC(offset),...) に渡します。

下流のブロックの Simulink® 優先順位。Async Interrupt ブロックの各出力が下流のブロック (たとえば Function-Call Subsystem) を駆動します。[VME interrupt number(s)] パラメーターに指定した VME 割り込み番号に対応する優先順位の配列を指定します。

レート変換コードを生成するには [Simulink task priority] パラメーターの値が必要です (Rate Transitions ブロックと Asynchronous ブロックを参照)。非同期タスクでその基本レートまたは呼び出し側から実時間を取得しなければならないときは、絶対時間の整合性を維持するために Simulink タスクの優先順位の値も必要です。通常、割り当てられる優先順位は周期的タスクに割り当てられる優先順位より高くなります。

メモ:

Simulink ソフトウェアは非同期タスクの動作をシミュレーションしません。非同期タスクの優先順位はコード生成専用であり、シミュレーション時には使用されません。

Async Interrupt ブロックの出力信号が Task Sync ブロックを駆動する場合はこのオプションを 1 に設定します。

RTOS 例 (VxWorks) では、優先順位の高い割り込みは優先順位の低い割り込みをプリエンプトできます。ISR の実行中に割り込みをロックアウトするにはプリエンプション フラグを 0 に設定します。この設定により ISR コードの最初と最後に intLock() および intUnlock() 呼び出しが生成されます。割り込みをロックアウトすると、intLockLevelSet() レベル以下の割り込みに関して、システムの割り込み応答時間が増加するため、慎重に使用してください。[VME interrupt number(s)] パラメーターに入力した VME 割り込み番号に対応するフラグの配列を指定します。

メモ:

[VME interrupt vector offset(s)] パラメーターおよび [Simulink task priority] パラメーターを指定する配列の要素数は [VME interrupt number(s)] パラメーターに指定された配列の要素数と一致しなければなりません。

選択すると Async Interrupt ブロックによって生成された ISR はハードウェア タイマーから絶対時間を読み取って独自のタイマーを管理します。[Timer size] パラメーターでハードウェア タイマーのサイズを指定します。

ISR タイマーの分解能。Async Interrupt ブロックによって生成された ISR は独自の絶対時間カウンターを保持します。既定の設定ではこれらのタイマーは tickGet 呼び出しを使用して RTOS (VxWorks) カーネルから値を取得します。[Timer resolution] パラメーターでこれらのカウンターの分解能を指定します。既定の分解能は 1/60 秒です。ボード サポート パッケージ (BSP) の tickGet 分解能は異なる場合があります。BSP の tickGet 分解能を調べて [Timer resolution] パラメーターに入力します。

RTOS 例 (VxWorks) 以外の RTOS をターゲットにしている場合は tickGet 呼び出しをターゲット RTOS への等価な呼び出しに置き換えます。またはターゲット ハードウェアのタイマー レジスタを読み取るコードを生成します。詳細については、非同期タスクにおけるタイマーおよびAsync Interrupt ブロックの実装を参照してください。

ハードウェア タイマーの時間刻みを保存するためのビット数。[Manage own timer] パラメーターを選択した場合、Async Interrupt ブロックによって生成された ISR はこのタイマー サイズを使用します。サイズは [32bits] (既定の設定)、[16bits][8bits][auto] から選択できます。[自動] を選択した場合、コード ジェネレーターは [アプリケーションのライフスパン (日)] パラメーターおよび [Timer resolution] パラメーターの設定に基づいてタイマー サイズを決定します。

既定の設定ではタイマーの値は 32 ビット整数として保存されます。[Timer size] パラメーターを [自動] に設定した場合は [アプリケーションのライフスパン (日)] パラメーターを設定することによってカウンターのワード サイズを間接的に制御できます。[アプリケーションのライフスパン (日)] に設定した値がコード ジェネレーターには大きすぎて指定した分解能の 32 ビット整数として処理できない場合、コード ジェネレーターはオーバーフローに対処するために 2 番目の 32 ビット整数を使用します。

詳細は、時間カウンターに対するメモリの割り当ての制御を参照してください。非同期タスクにおけるタイマーも参照してください。

選択すると Simulink ソフトウェアによって Async Interrupt ブロックに入力端子が追加されます。この端子はシミュレーション専用です。シミュレーションする 1 つ以上の割り込みソースをシミュレーション端子に接続します。

メモ:

ブロックが生成コードに関与しないようにするために、コードを生成する前にシミュレーション入力を駆動するブロックを削除することを検討してください。または、双対モデル アプローチ:コード生成で説明するように Environment Controller ブロックを使用できます。Environment Controller ブロックを使用する場合、駆動ブロックのサンプル時間が生成コードでサポートされるサンプル時間に寄与します。

R2006a で導入