レートベース モデルからのコードの生成
モデルのテスト ハーネスではなく、レートベース モデルからコードを生成します。
レートベース モデルからコードを生成するには、次のようにします。
Simulink® ツールストリップの [アプリ] タブで [Embedded Coder] をクリックします。
[C コード] タブが開いたら、[ビルド] をクリックします。
レートベース モデルのコード生成レポート
レートベース モデルのコード生成レポートに、モデルのタイミングの説明があります。
コード生成レポートを開くには、[C コード] タブで [最新レポートを開く] を選択します。
次に、[コード インターフェイス レポート] をクリックして、生成コードの関数のタイミングを確認します。
レートベース モデルの生成コードのエントリ ポイント
生成コードのエントリ ポイントは、シングルタスクとマルチタスク、シングルレートとマルチレートの組み合わせで制御されます。
シングルタスクを適用するには、[各離散レートを個別のタスクとして扱う] コンフィギュレーション パラメーターをクリアします。マルチタスクを可能にするには、このパラメーターを選択します。
次の表は、ex_rate_based_model
モデルの生成コードのエントリ ポイントを示しています。このモデルには、Subsystem1
および Subsystem2
という名前の 2 つの Atomic サブシステムが含まれています。
Subsystem1
は入力に 2 を乗算します。Subsystem2
は入力に 4 を乗算します。
構成 | 明示的にスケジュールされたレート | 生成されたコードのエントリ ポイント |
---|---|---|
シングルタスクまたはマルチタスク。 | シングルレート。
| 0.2 秒ごとに周期的に呼び出される 1 つのエントリポイント関数 void ex_rate_based_model_step(void) { ex_rate_based_model_Y.Out1 = 2.0 * ex_rate_based_model_U.In1; ex_rate_based_model_Y.Out2 = 4.0 * ex_rate_based_model_U.In2; } |
シングルタスク。 | マルチレート。
| 0.2 秒ごとに周期的に呼び出される 1 つのエントリポイント関数。 エントリポイント関数内で、カウンター ( void ex_rate_based_model_step(void) { ex_rate_based_model_Y.Out1 = 2.0 * ex_rate_based_model_U.In1; if (ex_rate_based_model_M->Timing.TaskCounters.TID[1] == 0) { ex_rate_based_model_Y.Out2 = 4.0 * ex_rate_based_model_U.In2; } rate_scheduler(); } エントリポイント関数の実行時にレートスケジューラ関数でカウンターがリセットされる。 static void rate_scheduler(void) { (ex_rate_based_model_M->Timing.TaskCounters.TID[1])++; if ((ex_rate_based_model_M->Timing.TaskCounters.TID[1]) > 1) { ex_rate_based_model_M->Timing.TaskCounters.TID[1] = 0; } } |
マルチタスク。 | マルチレート。
| 2 つのエントリポイント関数。1 つは 0.2 秒ごとに周期的に呼び出され、もう 1 つは 0.4 秒ごとに周期的に呼び出される。 レートは優先順位が設定されたプリエンプティブ マルチタスク スキームを使用して実行される。速いレートに割り当てられる優先順位は高くなるため、先に実行される。 void ex_rate_based_model_step0(void) { ex_rate_based_model_Y.Out1 = 2.0 * ex_rate_based_model_U.In1; } void ex_rate_based_model_step1(void) { ex_rate_based_model_Y.Out2 = 4.0 * ex_rate_based_model_U.In2; } |