Main Content

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

サブシステム用の関数の生成を制御

サブシステム関数とは

サブシステム関数は、モデル内のサブシステムに対してコード ジェネレーターで生成される関数です。関数インターフェイスおよびコード ジェネレーターでのコードのパッケージ方法は、サブシステムがバーチャルまたは Atomic (非バーチャル) のどちらであるかと、Subsystem ブロックのパラメーターの設定方法によって決まります。詳細については、Subsystem、Atomic Subsystem、CodeReuse Subsystemを参照してください。

サブシステム関数コードの生成を制御するオプション

コード ジェネレーターでサブシステムからコードを生成する方法を制御するようにモデルを設計および設定できます。

目的参照先
選択したサブシステムからインライン コードを生成する。サブシステム コードのインライン化
1 つのサブシステムのみにコードを生成する。個別のサブシステムのコードと実行可能ファイルの生成
引数のない関数を別々に生成し、オプションで個々のファイルにサブシステム コードを配置する。サブシステム コードを別々の関数およびファイルとして生成
モデル内の複数の場所にインクルードされるサブシステムに対して、1 つの再呼び出し可能な関数を生成する。サブシステムからの再呼び出し可能なコードの生成
モデル参照階層の複数の場所にインクルードされるサブシステムに対して、1 つの再呼び出し可能な関数を生成する。モデル間で共有されるライブラリ サブシステムからの再利用可能なコードの生成
複数の関数インターフェイスを含む再利用可能なライブラリ サブシステム用のコードを生成する。Library-Based Code Generation for Reusable Library Subsystems (Embedded Coder)

サブシステム関数の依存関係

サブシステムから生成されたコードは、モデルに対して生成されたコードから完全に独立できます。サブシステムのコードを生成するときは、サブシステム関数のコードが別のファイルに記述されている場合であっても、モデルのグローバル データ構造体を参照できます。各サブシステム コード ファイルには、依存性を説明する include 命令とコメントが含まれています。コード ジェネレーターは、循環的なファイル依存性を確認し、ビルド時にそれらについて警告します。コード ジェネレーターによるコードのパッケージ化の方法については、ビルド プロセスのファイルの依存関係の管理を参照してください。

親モデルに対して生成されたコードから独立したサブシステム関数コードを生成するには、モデル間で共有されるライブラリ サブシステムからの再利用可能なコードの生成の説明に従って、サブシステムをライブラリに配置し、再利用可能なサブシステムとして構成します。

Embedded Coder® ライセンスがある場合、さまざまな関数インターフェイスをもつ再利用可能なサブシステムで構成されるライブラリ用のコードを生成することができます。詳細については、Library-Based Code Generation for Reusable Library Subsystems (Embedded Coder)を参照してください。

生成されたコードでのサブシステム境界の保持

以下の例では、バーチャル サブシステムの境界を保持する方法を説明します。サブシステム パラメーター [Atomic サブシステムとして扱う] を選択することにより、サブシステムのコードが Atomic サブシステムとして実行されるようにビルドするようコード ジェネレーターに指示します。システムを Atomic サブシステムとしてマークしたら、ブロック パラメーター [コード生成関数のパッケージ化] を設定することで、コード ジェネレーターがコードでサブシステムを表す方法を指定できます。コード ジェネレーターでサブシステム用にこれらのコード実装を生成するように指定できます。

  • インライン: 呼び出しサイトでサブシステム コードをインライン化

  • 関数: グローバル データ構造体で I/O および内部データをもつ void/void 関数

  • 再利用可能な関数: 関数の引数としてデータが渡される再呼び出し可能関数

  • 自動: コンテキストに基づいて Simulink Coder により実装を最適化

1. コードとコード生成レポートを生成します。

2.生成されたレポートを使用して生成されたソース ファイル rtwdemo_atomic.c を検査します。SS1 の場合、コード ジェネレーターは関数名 myfun をもつ再利用可能な関数コードを生成します。

Simulink および Simulink Coder は、

パラメーター [代数ループの発生の最小化] を選択した場合、"疑似" 代数ループを回避できます。代数ループの発生を最小限に抑える方法の詳細については、Simulink ドキュメンテーションを参照してください。

モデル例

model = 'rtwdemo_atomic';
open_system(model);

関連するトピック