レートベース モデルからのコードの生成
モデルのテスト ハーネスではなく、レートベース モデルからコードを生成します。
レートベース モデルからコードを生成するには、次のようにします。
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;
}
|