Main Content

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

モデルのエントリポイント関数用のコード生成の構成

エントリポイント関数とは

エントリ ポイントは、プログラム コントロール (実行) の転送が行われるコード内の場所です。main 関数 (main()) は C/C++ プログラムへのエントリ ポイントであり、アプリケーションが実行を開始すると呼び出されます。たとえば、関数 main などから、他の関数への呼び出しによって、関数コードにエントリ ポイントが提供されます。プログラム コントロールは呼び出される関数に転送されます。関数のコードが実行され、終了すると、コントロールが main または他の呼び出し関数に返されます。

モデルのコードを生成するときに、コード ジェネレーターは生成されたコードを実行するために呼び出すことができる一連のエントリポイント関数を定義します。生成された関数は、外部コードまたは変更する生成された main 関数のバージョンから呼び出すことができます。

コード生成レポートの [コード インターフェイス レポート] セクションに、コード ジェネレーターがモデルに対して生成するエントリポイント関数が一覧表示されます。詳細については、Analyze the Generated Code Interface (Embedded Coder)を参照してください。

生成されたエントリポイント関数のカテゴリとタイプ

コード ジェネレーターがモデルと関数の呼び出しインターフェイス向けに作成するエントリポイント関数のタイプは、モデルが以下であるかどうかによって異なります。

  • レートベースまたはエクスポート関数モデルである

  • 再利用可能なマルチインスタンス コード生成用に構成されている

モデルのスタイルと設定に応じて、コード ジェネレーターは以下のエントリポイント関数を 1 つ以上作成します。

関数カテゴリ関数説明
初期化/終了model_initialize

モデルの初期化コード。アプリケーション コードの開始位置で関数を "一度" 呼び出します。この関数を使用してリアルタイム モデル データ構造体 (rtM) をリセットしないでください。

model_terminate

システムをオフにするコード。ERT ベースのモデルの場合、モデル コンフィギュレーション パラメーター[終了関数の生成] (Embedded Coder) (既定で設定されている) をオフにしてこの関数の生成を抑制できます。

実行model_step

レートベース モデル内のブロックの場合、出力および更新コード。モデル コンフィギュレーション パラメーター[1 つの出力/更新関数] (既定で選択) をオフにすると、関数 model_step を生成する代わりにコード ジェネレーターは関数 model_outputmodel_update を生成します。

model_function-nameエクスポートした関数モデルの場合、サブシステムのエクスポート関数。
function-nameエクスポートした関数モデルの場合、Simulink Function ブロックのエクスポート関数。
model_reset

モデルに Reset Function ブロックが含まれている場合、生成されるリセット コード。条件または状態をリセットするには、アプリケーション コードから関数を呼び出します。

ref-model参照モデルの場合、出力および更新コード。
isr_numinterrupt-number_vecinterrupt-vector-offsetAsync Interrupt ブロックの場合、割り込みサービス ルーチン (ISR) コード。
共有ユーティリティfunction-name共有ユーティリティ関数の場合、出力コード。

エントリポイント関数が再利用可能かどうかを設定

既定では、コード ジェネレーターは、最上位モデルに対して再利用または再呼び出し可能でないコードを生成します。エントリポイント関数には void-void インターフェイスがあります。コードは、共有メモリ内にあるグローバル データ構造体に直接アクセスすることで他のコードとやりとりします。

アプリケーションに再利用可能なマルチインスタンスのエントリポイント関数コードが必要な場合、一意のデータを使用して各関数 (インスタンス) を呼び出すようにコード ジェネレーターを構成できます。この場合、コードは再呼び出し可能です。

モデル コンフィギュレーション パラメーターの[コード インターフェイスのパッケージ化]および関連するパラメーターを使用して、エントリポイント関数が再利用可能かどうかを設定します。選択するパラメーター設定は、システム ターゲット ファイル、プログラミング言語および引数インターフェイスに関するコンフィギュレーション選択などの要因によって異なります。

単一インスタンスの C エントリポイント関数の既定の設定

既定では、GRT ベースおよび ERT ベースのシステム ターゲット ファイルに対して、コード ジェネレーターは単一インスタンスの C エントリポイント関数を生成します。生成コードは次を実行します。

  • 引数のない実行関数を作成する (void-void)。

  • (コンパイル時に) モデル データ構造体に対してメモリを静的に割り当てる。

単一インスタンスのエントリポイント関数のコードを構成するための既定のモデル コンフィギュレーション パラメーター設定は次の通りです。

再利用可能なマルチインスタンス C エントリポイント関数の生成

GRT ベースまたは ERT ベースいずれかのシステム ターゲット ファイルに対して再利用可能なエントリポイント関数を C で生成するようにコード ジェネレーターを構成できます。ただし、既定では、コード ジェネレーターが生成する関数インターフェイスはさまざまです。モデル コンフィギュレーション パラメーター[言語][C] に設定され、[コード インターフェイスのパッケージ化][再利用可能な関数] に設定されていると仮定すると、コード ジェネレーターは各システム ターゲット ファイル シナリオに対してこのエントリ ポイント関数コードを生成します。

システム ターゲット ファイルインターフェイス
GRT ベース
  • 再呼び出し可能で、再利用可能なマルチインスタンスの C エントリポイント関数。

  • モデルのルートレベルの Inport ブロックと Output ブロックの値をリアルタイム モデル データ構造体にパックします。この構造体を実行関数に引数として参照渡しします。

  • モデル インスタンスのデータの実行時にメモリを動的に割り当てます。malloc などの関数を呼び出すことでメモリを割り当てます。

ERT ベース
  • 再呼び出し可能で、再利用可能なマルチインスタンスの C エントリポイント関数。

  • 各モデルのルートレベルの Inport ブロックと Outport ブロックの値を個別の引数として実行関数に渡します。

  • モデル データ構造体に対してメモリを静的に割り当てます。

ERT ベースのシステム ターゲット ファイルを使用していて、再呼び出し可能で再利用可能なマルチインスタンスの C エントリポイント関数を生成する場合は、以下を検討します。

  • 動的なメモリ割り当てを使用して、モデル データ構造体を初期化。[モデルの初期化に動的メモリ割り当てを使用] (Embedded Coder) を選択します。

  • モデルのルートレベルの Inport ブロックの値を構造体にパックし、ルートレベルの Outport ブロックの値を 2 番目の構造体にパックし、構造体を実行関数に引数として参照渡し。[ルートレベル I/O を以下として渡す] (Embedded Coder)[構造体参照] に設定します。

  • モデルのルートレベルの Inport ブロックと Output ブロックの値をリアルタイム モデル データ構造体にパックし、その構造体を実行関数に引数として参照渡し。[ルートレベル I/O を以下として渡す] (Embedded Coder)[モデル データ構造体の一部] に設定します。

再利用可能なマルチインスタンスの C++ エントリポイント関数の生成

C++ クラス インターフェイスはモデル データをクラス プロパティとしてカプセル化し、エントリポイント関数をクラス メソッドとしてカプセル化します。このインターフェイスは、ERT ベースのシステム ターゲット ファイルで使用するために利用可能です。インターフェイスを使用するには、[言語][C++] に設定し、[コード インターフェイスのパッケージ化][C++ クラス] に設定します。以下が可能です。

  • [C++ クラス インターフェイスの設定] (Embedded Coder) をクリックすることで、C++ クラス インターフェイスをプレビューおよびカスタマイズします。カスタマイズとは、外部コードとの統合用にコードを生成したり、コードがコーディング標準に準拠していることを確認できることを意味します。

  • ブロック パラメーター構造体をパブリック、プライベートまたは保護されたデータのメンバーとして生成するかどうかを指定することで、クラスの継承の可視性を設定できます。[パラメーターの可視性] (Embedded Coder)[公開][プライベート][保護] に設定します。

  • コードの実行速度または調整可能性の要件を満たす、モデル ブロック パラメーターの C++ インターフェイス コードを生成します。このコードは、インライン化されないアクセス メソッドまたはインライン化されたアクセス メソッドのいずれかになります。[パラメーターのアクセス] (Embedded Coder)[メソッド] または [インライン化されたメソッド] に設定します。

  • コードの実行速度、データの調整可能性またはデータのパッケージ化に関する要件を満たす、モデルのルートレベルの Inport と Outport ブロックセットの C++ インターフェイス コードを生成できます。このコードは次のいずれかのタイプのアクセス メソッドになります。

    アクセス メソッドのタイプExternal I/O access (Embedded Coder)を次に設定
    インライン化されていないメソッド
    インライン化されているインライン化されたメソッド
    インライン化されていない構造体ベース構造体ベースのメソッド
    インライン化された構造体ベースインライン化された構造体ベースのメソッド
  • ルートレベル I/O 構造体をパブリック、プライベートまたは保護されたデータのメンバーとして生成するかどうかを指定することで、クラスの継承の可視性を設定できます。[外部 I/O の可視性] (Embedded Coder)[パブリック][プライベート]、または [保護] に設定します。

生成されたエントリポイント関数宣言の構成

統合やコード規格への準拠といったアプリケーション要件に応じて、コード ジェネレーターがエントリポイント関数の宣言を生成する方法を構成しなければならない場合があります。Embedded Coder® には複数の構成オプションが用意されています。

メモリ内でのエントリポイント関数の配置の構成

アプリケーションで、メモリ内でのエントリポイント関数の配置を構成する必要がある場合は (生成コードを特定のハードウェア向けに最適化するためなど)、既定のメモリ セクションをモデル全体の関数のカテゴリに適用できます。コード マッピング エディターで、特定のメモリ セクションを使用するように定義された関数カスタマイズ テンプレートに関数カテゴリをマッピングします。Code Mappings Editor (Embedded Coder)を参照してください。

生成されたエントリポイント関数とインターフェイスをとる方法

  1. モデルのコードが生成された後、[コード] ビューを使用して生成されたエントリポイント関数、および該当する場合は、外部の入力端子と出力端子を表す変数を確認します。

  2. モデルのエントリポイント関数を宣言する生成されたヘッダー ファイルを含める #include ステートメントを外部コードに追加します。

  3. 生成されたファイル rtwtypes.h を含める #include ステートメントを追加します。このファイルは型定義、#define ステートメント、および列挙型を提供します。

  4. ターゲット固有のデータ構造体とハードウェア (ADC や DAC など) を初期化します。

  5. 該当する場合は、再利用可能なモデルの各インスタンスのデータを初期化します。

  6. 該当する場合は、モデルの Inport ブロックを表す生成された変数に入力データを書き込みます。

  7. 生成されたエントリポイント関数を呼び出し、関数 rt_OneStep の使用を設定します。

  8. 該当する場合は、モデルの Outport ブロックを表す生成された変数からデータを読み取ります。

詳細については、Deploy Generated Standalone Executable Programs To Target Hardware (Embedded Coder)を参照してください。

関連するトピック