Main Content

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

サブシステム コードのインライン化

非バーチャル サブシステムを構成し、モデル コードを使用してサブシステム コードをインライン化できます。[Subsystem のパラメーター] ダイアログ ボックスで、[関数のパッケージ化] パラメーターに [自動] または [インライン] を設定すると、サブシステムの生成コードをインライン化できます。

[自動] オプションは既定の設定です。モデルにサブシステムのインスタンスが 1 つしかないときに [自動] オプションを使用すると、サブシステム コードをインライン化します。サブシステムのインスタンスが複数存在するときは、[自動] オプションを使用すると、(再利用可能な関数として) 関数のただ 1 つのコピーを生成します。複数の呼び出しがある Function-Call Subsystem については、[再利用できない関数] を指定した場合と同じようにサブシステム コードが生成されます。

サブシステム コードをインライン化するには、[インライン] を選択します。[インライン] オプションは、無条件でサブシステムをインライン化するようにコード ジェネレーターに明示的に指示します。

コードをインライン化するサブシステムの構成

サブシステムをインライン化するように構成するには、次の手順に従います。

  1. Subsystem ブロックを右クリックします。コンテキスト メニューから [ブロックのパラメーター (Subsystem)] を選択します。

  2. サブシステムがバーチャルの場合は、[Subsystem のパラメーター] ダイアログ ボックスで [Atomic サブシステムとして扱う] を選択します。このオプションを指定すると、サブシステムは非バーチャルになります。[コード生成] タブの [関数のパッケージ化] オプションが利用可能になります。

    システムが非バーチャルになっていれば、[関数のパッケージ化] オプションは既に選択されています。

  3. [コード生成] タブをクリックし、[関数のパッケージ化] パラメーターから [自動] または [インライン] を選択します。

  4. [適用] をクリックしてダイアログ ボックスを閉じます。

    サブシステムの境界線が太くなり、非バーチャルになったことを示します。

モデルからコードを生成する場合、コード ジェネレーターは model.c または model.cpp (もしくはその親システムのソース ファイル) 内にサブシステム コードをインライン化します。このコードは、次に示すシステムやブロックの識別タグによって識別できます。

/* Atomic SubSystem Block: <Root>/AtomicSubsys1 */

インライン化に関する例外

[インライン] オプションが選択されていても、コード ジェネレーターにより非バーチャル サブシステムがインライン化されないケースがあります。

  • サブシステムがインインラインでない S-Function によって呼び出される Function-Call Subsystem の場合、[インライン] オプションを無視。インラインでない S-Function は、関数ポインターを使用して呼び出します。そのため、Function-Call Subsystem は引数がすべて存在する関数を生成しなければなりません。

  • Function-Call Subsystem が関わるフィードバック ループでは、コード ジェネレーターにより、サブシステムの 1 つはインライン化されるのではなく強制的に関数として生成されます。ソフトウェアは、サブシステムが内部的に並べ替えられる順序に基づいて、関数として生成されるサブシステムを選択します。

  • サブシステムが SS_OPTION_FORCE_NONINLINED_FCNCALL オプションを TRUE に設定する S-Function ブロックから呼び出される場合は、インライン化されません。ユーザー定義の Async Interrupt ブロックまたは Task Sync ブロックが存在するときは、このような結果となる可能性があります。そのようなブロックは、関数として生成されなければなりません。これらのブロックは、vxlib1 ブロック ライブラリに配置され、SS_OPTION_FORCE_NONINLINED_FCNCALL オプションを使用します。このライブラリは、RTOS 例 (VxWorks®) との統合を示しています。[1]

メモ

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


[1] VxWorks is a registered trademark of Wind River® Systems, Inc.