このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
非同期の 函数调用子系统は他のモデル コードをプリエンプトしたり、プリエンプトされたりするため、1.つを超える信号要素が非同期のブロックに接続されている場合、不一致が生じます。このため、函数调用子系统に入出力される信号は、プリエンプションが発生したときに書き込みまたは読み取り中である場合があります。このように、一部が古く、一部が新しいデータが使用されます。この状況は、スカラー信号でも発生する場合があります。たとえば、信号が倍精度 (8 バイト) の場合、読み取りまたは書き込み操作で 2.つのマシンの指示が必要となる場合があります。
メモ
この節に示されているオペレーティングシステムの統合手法では,vxlib1
ライブラリの1つ以上のブロックを使用します。これらのブロックは,ターゲット環境でカスタムブロックを開発するのに役立つ開始点の例を提供します。
金宝app®率过渡ブロックは,異なるレートで実行中のブロック間のデータ転送時に発生するプリエンプションの問題を処理するように設計されています。これらの問題は,時間ベースのスケジューリングとコード生成で説明します。
レート変換の問題は、モデル コンフィギュレーション パラメーター[データ転送に対するレート変換を自動的に取り扱う)を選択することにより,自動的に処理できます。こうすることにより,速度过渡ブロックを手動で挿入なくても,マルチレートモデルにおける無効なレート変換(“非同期から周期”のレート変換や"非同期間" のレート変換) を防ぐことができます。非同期タスクの場合、金宝app模拟エンジンでは、挿入されるブロックがデータ転送時のデータの整合性をとるように設定されますが、確定性をもつようには設定されません。
非同期のレート変換の場合、速率转换ブロックによって、データの整合性はとれますが、確定性をもたせることはできません。したがって、速率转换ブロックを明示的に挿入した場合、ブロック パラメーター[確定的にデータ転送を確保(最大遅延))をオフにしなければなりません。
2つのブロック間に率过渡ブロックを挿入してデータの整合性をとる場合に,ブロックに関連付けられているタスクに優先度が割り当てられている場合,コードジェネレーターでは,優先度の高いタスクが優先度の低いタスクをプリエンプトでき,優先度の低いタスクは優先度の高いタスクをプリエンプトできないことを想定しています。いずれかのブロックのタスクに関連付けられている優先度が割り当てられず,両方のブロックのタスクの優先度が同じ場合,コードジェネレーターでは,いずれかのタスクが一方のタスクをプリエンプトできると想定します。
周期的タスクの優先順位は,[コンフィギュレーションパラメーター]ダイアログボックスの[ソルバー]ペインの[ソルバーの選択]セクションで指定されたパラメーターに従って、金宝app模拟エンジンによって割り当てられます。(周期的なサンプル時間の制約]パラメーターが(制約なし]
に設定されている場合,モデルの基本レートの優先順位は40
に設定されます。サブレートの優先順位は,パラメーター[優先順位の値が高いほどタスクの優先順位が高いことを示す]の設定に応じて,基本レートの優先順位から1
ずつ増加または減少します。
優先順位を手動で割り当てるには,パラメーター[周期样本时间属性]を使用します。金宝app仿真软件エンジンは,非同期のブロックに優先度を割り当てません。たとえば,异步中断ブロックに接続される 函数调用子系统の優先順位は、异步中断ブロックによって割り当てられます。
异步中断ブロックのブロックパラメーター[金宝appSimulinkタスクの優先順位]は,パラメーター(VME割り込み番号)に入力された各割り込み数の(必要な)優先順位レベルを指定します。この優先度配列によって,各割り込みに接続されたサブシステムの優先度が設定されます。
任务同步ブロックでは,RTOS例(VxWorks®) がターゲットの場合、ブロック パラメーター[優先順位の値が高いほどタスクの優先順位が高いことを示す]をオフにします。パラメーター(金宝app仿真软件任务优先级)で、接続されたブロックに関連するブロックの優先順位が指定されます (また、生成されたタスク コードに 实时操作系统優先順位が割り当てられます)。
vxlib1
ライブラリは2種類のレート変換ブロックを使用できるため便利です。この2つのブロックは,組み込みの模型速金宝app度过渡ブロックの事前に構成されたインスタンスです。
保护速度过渡ブロック:ブロックパラメーター[データ転送中の整合性を確保]が選択され、[確定的にデータ転送を確保)がオフに設定された 速率转换ブロック。
无保护的速率转换ブロック:[データ転送中の整合性を確保]がオフに設定された 速率转换ブロック。
非同期タスクに関係するレート変換の場合,データの整合性を維持できます。ただし,確定性は達成できません。率转换ブロックを使用するか、ターゲット固有のレート変換ブロックを使用するかを選択します。
以下のモデルでは率过渡ブロックを使用します。
次のモードのいずれかで率过渡ブロックを使用します。
データの整合性を保持、確定性なし
非保護
または,ターゲット固有のレート変換ブロックを使用します。RTOS例(VxWorks)では次のブロックを使用できます。
保护速率转换ブロック (リーダー)
保护速率转换ブロック (ライター)
不受保护的速度过渡ブロック
次のモデルでは2つの関数によって同じサブシステムがトリガーされます。
この2つのタスクの優先度は同じです。優先度が同じ場合,結果はこれらのタスクが周期的に開始するか,非同期的に開始するか,および診断設定によって異なります。次の表とメモで,これらの結果について説明します。
複数のトリガーをもつ 函数调用子系统のサンプル時間と優先度のサポート
异步优先级= 1 |
异步优先级= 2 |
异步优先未指明的 |
周期优先级= 1 |
周期优先级= 2 |
|
---|---|---|---|---|---|
异步优先级= 1 |
サポートあり(1) |
||||
异步优先级= 2 |
サポートあり(1) |
||||
异步优先未指明的 |
サポートあり(2) |
||||
周期优先级= 1 |
サポートあり |
||||
周期优先级= 2 |
サポートあり |
これらの結果はモデルコンフィギュレーションパラメーター[同じ優先順位をもつタスク]を使用して制御します。この診断は,同じ優先順位のタスクがターゲットシステムでお互いにプリエンプトできない場合,[なし]
に設定します。
この場合、次の警告メッセージが無条件で発行されます。
函数调用子系统有多个不指定优先级的异步触发器。如果这些触发器可以相互抢占,数据完整性将无法维护。
上の表の空のセルは,優先度が異なる複数のトリガーを表し,サポートされていません。
コード ジェネレーターでは、TriggerA
とTriggerB
のタイマーの設定 (時間ソース、分解能) が同じ場合、複数の割り込みに接続された 函数调用子系统の絶対時間の管理が可能です。
次の条件のすべてが上記のモデルで真であるとします。
函数调用子系统は,優先度の設定が同じ2つの非同期のトリガー(TriggerAおよびTriggerB)によってトリガーされます。
各トリガーは,関数ssSetTimeSource
および関数ssSetAsyncTimerAttributes
を呼び出して,時間およびタイマーの属性のソースを設定します。
トリガーされたサブシステムには,経過時間または絶対時間を必要とするブロック(离散时间积分器など)が含まれています。
非同期の函数调用子系统は1つのグローバル変数clockTick #
(#
はサブシステムに関連付けられたタスクID)をもちます。この変数は,非同期タスクの絶対時間を格納します。タイミングを処理する方法は次の2つです。
時間のソースがSS_TIMESOURCE_BASERATE
に設定される場合、コード ジェネレーターは、基本レートのクロック ティックからクロック ティック変数を更新して、函数调用子系统でタイマー コードを生成します。データ整合性は、同じ優先度が 三叉戟と 触发器に割り当てられている場合、維持されます。
時間のソースがSS_TIMESOURCE_SELF
の場合,TriggerAおよびTriggerBの生成コードによって,同じクロックティック変数がハードウェアクロックから更新されます。
クロックティック変数のワードサイズは,直接設定することもできますが,モデルコンフィギュレーションパラメーター[アプリケーションのライフスパン (日)]の設定に従って設定されます。タイマーの分解能は、三叉戟および 触发器の S函数(同じでなければなりません) によって設定されます。詳細については、非同期タスクにおけるタイマーおよび時間カウンターに対するメモリの割り当ての制御を参照してください。
挥发性
キーワードを使用したデータの整合性の保護ブロックパラメーター[データ転送中の整合性を確保]を選択すると、率转换ブロックに対して生成されたコードでは、挥发性
のグローバルなバッファーとセマフォを定義し,それらを使用して転送されるデータの整合性を保護します。保護を強化する場合や率转换ブロックを使用せずに保護する場合は,挥发性
を転送されたデータに明示的に適用できます。詳細については,波动型修飾子constとを使用したグローバルデータの保護(嵌入式编码)を参照してください。