メインコンテンツ

Embedded Coder クイック スタートを使用したコードの生成

ComponentDeploymentFcn は、Initialize Function ブロックと Terminate Function ブロックを使用して起動とシャットダウンの動作を表し、2 つの Function-Call Subsystem を使用してコンポーネント アルゴリズムを表す単純なエクスポート関数モデルです。Embedded Coder® クイック スタートを使用して、ComponentDeploymentFcn を組み込みコード生成用に準備します。この方法では、目的とアプリケーションに基づいてコード生成設定が選択されます。

クイック スタート ツールを使用したコードの生成

  1. 次のコマンドを入力して、モデル ComponentDeploymentFcn を開きます。

    openExample('ecoder/GenerateCServiceInterfaceCodeFromComponentModelExample',... 
      'supportingFile', 'ComponentDeploymentFcn.slx');

    Export function model that includes an Initialize Function block, Terminate Function block, an triggered function-call subsystem, and a periodic function-call subsystem.

  2. [C コード] タブがまだ開いていない場合、アプリ ギャラリーの [コード生成] で [Embedded Coder] をクリックします。

  3. [C コード] タブで [クイック スタート] をクリックします。

    Embedded Coder Quick Start display for model ComponentDeploymentFcn.

  4. クイック スタート ツールのステップを進め、[コード生成] ステップで停止します。各ステップで、生成するコードに関して質問されます。このチュートリアルでは、既に選択されている既定の設定を使用します。ツールでは、モデルに対して選択項目が検証され、コードの生成に必要なパラメーターの変更が示されます。

  5. [コード生成] ステップで、提案された変更を適用し、[次へ] をクリックして ComponentDeploymentFcn からコードを生成します。

    [コード生成が完了しました] ページには想定される次のステップが表示され、サービス コード インターフェイスを適用するコード生成用のモデルがツールで構成されたことが通知されます。サービス インターフェイス構成は、モデル データ要素を、モデル用に構成された共有 Embedded Coder ディクショナリで定義および保存されているサービス インターフェイスにマッピングします。

  6. [終了] をクリックします。

  7. Embedded Coder アプリで、[C コード] タブに戻ります。このタブからコード生成のカスタマイズを構成し、[コード] ビューでその結果をチェックできます。

    View of the ComponentDeploymentFcn model in context of Embedded Coder app. The toolstrip is at the top. The model is in the middle. The Code view is on the right.

生成されたコードの確認

生成されたコードは、ComponentDeploymentFcn.cComponentDeploymentFcn.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 は、生成されたエントリポイント関数がターゲット プラットフォーム サービスを呼び出すために使用するインターフェイスを宣言するヘッダー ファイルです。

生成されたコードのエントリポイント関数を確認するには、次のようにします。

  1. Simulink® エディター ウィンドウの右側にある、[コード] ビューで、検索バーを見つけます。

  2. 検索バーをクリックし、Function-Call Subsystem Accumulator 用に生成されたエントリポイント関数の名前である CD_accumulator を選択します。

    The string CD_integrator appears in the Code view search field and the response shows that Code view found an instance of the function name CD_integrator.

  3. 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 を呼び出して出力を書き込みます。コード ジェネレーターがサービス呼び出しのために適用するデータ通信方法と関数名は、コード マッピング エディターで選択されたサービス インターフェイスによって定義されます。既定では、コード マッピングは、関数実行の外 (実行前と実行後) で発生するデータ通信用に構成されたサービス インターフェイスを指定し、データ同時実行セーフガードを適用します。関数が実行されても、入力データの値は変更されません。関数がデータにアクセスするたびに、コードは同じ値を使用します。このデータ通信方法では、メモリの最適化がデータの鮮度よりも優先されます。

  4. [コード] ビューで、右側の矢印を使用して、ComponentDeploymentFcn.c の関数定義と ComponentDeploymentFcn.h の宣言を含む、CD_accumulator の各インスタンスをステップ実行します。また、ファイル メニューから各ファイルの検索ヒット数を確認することもできます。

    Code view display of search hit count for each generated code file.

  5. 検索手順を繰り返して、他のエントリポイント関数のインスタンスを見つけて調べます。

次に、サービス インターフェイス構成を変更し、生成されたコードの違いを確認します。