Embedded Coder クイック スタートを使用したコードの生成
ComponentDeploymentFcn は、Initialize Function ブロックと Terminate Function ブロックを使用して起動とシャットダウンの動作を表し、2 つの Function-Call Subsystem を使用してコンポーネント アルゴリズムを表す単純なエクスポート関数モデルです。Embedded Coder® クイック スタートを使用して、ComponentDeploymentFcn を組み込みコード生成用に準備します。この方法では、目的とアプリケーションに基づいてコード生成設定が選択されます。
クイック スタート ツールを使用したコードの生成
次のコマンドを入力して、モデル
ComponentDeploymentFcnを開きます。openExample('ecoder/GenerateCServiceInterfaceCodeFromComponentModelExample',... 'supportingFile', 'ComponentDeploymentFcn.slx');
[C コード] タブがまだ開いていない場合、アプリ ギャラリーの [コード生成] で [Embedded Coder] をクリックします。
[C コード] タブで [クイック スタート] をクリックします。

クイック スタート ツールのステップを進め、[コード生成] ステップで停止します。各ステップで、生成するコードに関して質問されます。このチュートリアルでは、既に選択されている既定の設定を使用します。ツールでは、モデルに対して選択項目が検証され、コードの生成に必要なパラメーターの変更が示されます。
[コード生成] ステップで、提案された変更を適用し、[次へ] をクリックして
ComponentDeploymentFcnからコードを生成します。[コード生成が完了しました] ページには想定される次のステップが表示され、サービス コード インターフェイスを適用するコード生成用のモデルがツールで構成されたことが通知されます。サービス インターフェイス構成は、モデル データ要素を、モデル用に構成された共有 Embedded Coder ディクショナリで定義および保存されているサービス インターフェイスにマッピングします。
[終了] をクリックします。
Embedded Coder アプリで、[C コード] タブに戻ります。このタブからコード生成のカスタマイズを構成し、[コード] ビューでその結果をチェックできます。

生成されたコードの確認
生成されたコードは、ComponentDeploymentFcn.c、ComponentDeploymentFcn.h、および services.h という 3 つの主要ファイルに含まれています。MATLAB® の現在のフォルダー内にある ComponentDeploymentFcn_ert_rtw フォルダーに、ファイル ComponentDeploymentFcn.c および ComponentDeploymentFcn.h があります。ターゲット プラットフォーム サービスの関数プロトタイプを指定するヘッダー ファイルであるファイル services.h は、フォルダー services にあります。
フォルダー slprj/ert/_sharedutils に、生成されたコードで既定で使用される標準のデータ型を定義するファイル rtwtypes.h が含まれています。このフォルダーには、複数のモデルで共有できる (または共有しなければならない) 生成ファイルが格納されています。
ファイル ComponentDeploymentFcn.h および ComponentDeploymentFcn.c は、アプリケーション コードから呼び出すエントリポイント関数を宣言および定義します。このモデル例では、エントリポイント関数には、初期化関数、2 つの実行関数、および終了関数があります。これらの関数は、構成したサービス インターフェイスを介してターゲット アプリケーション コードとの間でデータを交換します。ファイル services.h は、生成されたエントリポイント関数がターゲット プラットフォーム サービスを呼び出すために使用するインターフェイスを宣言するヘッダー ファイルです。
生成されたコードのエントリポイント関数を確認するには、次のようにします。
Simulink® エディター ウィンドウの右側にある、[コード] ビューで、検索バーを見つけます。
検索バーをクリックし、Function-Call Subsystem
Accumulator用に生成されたエントリポイント関数の名前であるCD_accumulatorを選択します。
ComponentDeploymentFcn.cで、エントリポイント関数CD_accumulatorに対して生成されたコードを検査します。void CD_accumulator(void) { const real_T *tmpDataTransferIRead; real_T rtb_Sum_0; int32_T i; tmpDataTransferIRead = get_CD_accumulator_DataTransfer(); for (i = 0; i < 10; i++) { rtb_Sum_0 = tmpDataTransferIRead[i] + CD_measured.delay[i]; (getref_CD_accumulator_OutBus_y())[i] = CD_tunable.k * rtb_Sum_0; CD_measured.delay[i] = rtb_Sum_0; } }エントリポイント関数は、データ転送サービス関数
get_CD_accumulator_DataTransferを呼び出して、積分器の関数から転送された出力値を読み取ります。バス信号の各要素に対して、関数は遅延とゲイン値を適用し、ターゲット プラットフォームの送信側サービス関数getref_CD_accumulator_OutBus_yを呼び出して出力を書き込みます。コード ジェネレーターがサービス呼び出しのために適用するデータ通信方法と関数名は、コード マッピング エディターで選択されたサービス インターフェイスによって定義されます。既定では、コード マッピングは、関数実行の外 (実行前と実行後) で発生するデータ通信用に構成されたサービス インターフェイスを指定し、データ同時実行セーフガードを適用します。関数が実行されても、入力データの値は変更されません。関数がデータにアクセスするたびに、コードは同じ値を使用します。このデータ通信方法では、メモリの最適化がデータの鮮度よりも優先されます。[コード] ビューで、右側の矢印を使用して、
ComponentDeploymentFcn.cの関数定義とComponentDeploymentFcn.hの宣言を含む、CD_accumulatorの各インスタンスをステップ実行します。また、ファイル メニューから各ファイルの検索ヒット数を確認することもできます。
検索手順を繰り返して、他のエントリポイント関数のインスタンスを見つけて調べます。
次に、サービス インターフェイス構成を変更し、生成されたコードの違いを確認します。