ドキュメンテーション

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

MATLAB Function ブロックを使用した C コードの統合

Simulink モデルからの C コードの呼び出し

MATLAB Function ブロックを使用して Simulink® モデルから外部 C コードを呼び出すことができます。次の概要の手順に従います。

  1. ソース (.c) とヘッダー (.h) ファイルで構成される既存の C コードから始めます。

  2. MATLAB Function ブロックで、C コードを呼び出す MATLAB® コードを入力します。関数 coder.ceval を使用します。データを参照によって渡すには、coder.refcoder.rref または coder.wref を使用します。

  3. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [シミュレーション ターゲット] ペインでシミュレーション用の C ソースおよびヘッダー ファイルを指定します。二重引用符を使用してヘッダー ファイルを含めます (たとえば、#include "program.h")。作業フォルダー外の C ソースおよびヘッダー ファイルにアクセスする必要がある場合は、[シミュレーション ターゲット] ペインで、[インクルード ディレクトリ] テキスト ボックスにパスの一覧を作成します。

    または、関数 coder.cinclude および関数 coder.updateBuildInfo を使用して、MATLAB コード内でソース ファイルおよびヘッダー ファイルを指定します。外部コードへのインターフェイスを開発するために、coder.ExternalDependency クラスを使用できます。サポートされるワークフローを確認するには、カスタム コードのインポートを参照してください。

  4. Simulink モデルをテストし、正しく機能することを確認します。

  5. Simulink Coder™ ライセンスがある場合は、このメソッドを使用してターゲットのコードを生成できます。コード生成で同じソースおよびヘッダー ファイルを使用するには、[コード生成]、[カスタム コード] ペインで [シミュレーション ターゲットと同じカスタム コードの設定を使用] をクリックします。異なるソースおよびヘッダー ファイルを指定することもできます。

    シミュレーションおよびコード生成用のさまざまなコマンドを実行するコードに条件を付ける場合、関数 coder.target を使用できます。

MATLAB Function ブロック内での coder.ceval の使用

この例では、単純な C プログラム doubleItMATLAB Function ブロックから呼び出す方法を示します。

  1. 現在の作業フォルダーにソース ファイル doubleIt.c を作成します。

    #include "doubleIt.h"
    
    double doubleIt(double u)
    {
         return(u*2.0);
    }
    
  2. 現在の作業フォルダーにヘッダー ファイル doubleIt.h を作成します。

    #ifndef MYFN
    #define MYFN
    
    double doubleIt(double u);
    
    #endif
    
  3. 新しい Simulink モデルを作成します。myModel として保存します。

  4. [ライブラリ ブラウザー] で、[User-Defined Functions] から MATLAB Function ブロックをモデルに追加し、ブロックをダブルクリックしてエディターを開きます。

  5. doubleIt プログラムを呼び出すコードを入力します。

    function y = callingDoubleIt(u)
    
    y = 0.0;
    y = coder.ceval('doubleIt',u);
    
  6. 3.5 の値をもつ Constant ブロックを MATLAB Function ブロックの入力端子に接続します。

  7. Display ブロックを出力端子に接続します。

  8. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[シミュレーション ターゲット] ペインを開きます。

  9. [生成時に挿入するカスタム C コード] セクションで、リストから [ヘッダー ファイル] を選択し、[ヘッダー ファイル] テキスト ボックスに「#include "doubleIt.h"」と入力します。

  10. [追加のビルド情報] セクションで、リストから [ソース ファイル] を選択し、[ソース ファイル] テキスト ボックスに「doubleIt.c」と入力して [OK] をクリックします。

  11. シミュレーションを実行します。値 7 が Display ブロックに表示されます。

インポートされたバスと列挙型定義の制御

この手順はシミュレーションにのみ適用されます。

Simulink は MATLAB Function ブロックと Stateflow® のコードを生成し、モデルのシミュレーションを実行します。MATLAB Function ブロックまたは Stateflow を使用して外部 C コードを呼び出すと、モデル シミュレーションでインポートされたバスと列挙型の型定義を制御できます。

Simulink で型定義を生成するか、ユーザーによる型定義を含むヘッダー ファイルを与えることができます。この動作は、[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [インポートしたバスと列挙型に対して typedef を生成する] チェック ボックスを使用して制御できます。

列挙型とバス型を定義するカスタム ヘッダー ファイルを含めるには、次の手順に従います。

  1. [インポートしたバスと列挙型に対して typedef を生成する] チェック ボックスをオフにします。

  2. [シミュレーション ターゲット] ペインの [ヘッダー ファイル] テキスト ボックスでヘッダー ファイルをリストします。

型定義を自動的に生成するように Simulink を構成するには、次の手順に従います。

  1. [インポートしたバスと列挙型に対して typedef を生成する] チェック ボックスをオンにします。

  2. バスまたは列挙型に対応するヘッダー ファイルはリストしないでください。

参考

| | | | | | | |

関連する例

詳細