MATLAB Function ブロックを使用した C コードの統合
Simulink® モデルに使用する C コードがある場合、MATLAB Function ブロックを使用してモデルに外部 C コードを呼び出すことができます。MATLAB Function ブロックは、MATLAB® コマンドを使用して C コードを呼び出します。外部 C コードを呼び出す MATLAB Function ブロックを含むモデルからコードを生成することもできます。
Simulink モデルからの C コードの呼び出し
Simulink モデルの外部 C コードを呼び出すには、次の手順に従います。
モデルで使用する C コードを含むソース (
.c
) ファイルとヘッダー (.h
) ファイルを特定します。MATLAB Function ブロックをモデルに挿入します。
MATLAB Function ブロックで、関数
coder.ceval
を使用して C コードを呼び出します。データを参照によって渡すには、coder.ref
、coder.rref
またはcoder.wref
を使用します。[コンフィギュレーション パラメーター] ウィンドウの [シミュレーション ターゲット] ペインで C ソースおよびヘッダー ファイルを指定します。二重引用符を使用してヘッダー ファイルを含めます (たとえば、
#include "program.h"
)。作業フォルダー外の C ソースおよびヘッダー ファイルにアクセスする必要がある場合は、[シミュレーション ターゲット] ペインで、[インクルード ディレクトリ] テキスト ボックスにパスの一覧を作成します。または、関数
coder.cinclude
および関数coder.updateBuildInfo
を使用して、MATLAB コード内でソース ファイルおよびヘッダー ファイルを指定します。外部コードへのインターフェイスを開発するために、coder.ExternalDependency
クラスを使用できます。サポートされるワークフローを確認するには、カスタム コードのインポートを参照してください。Simulink モデルをテストし、正しく機能することを確認します。
Simulink Coder™ ライセンスがある場合は、ターゲットのコードを生成できます。コード生成で同じソースおよびヘッダー ファイルを使用するには、[コンフィギュレーション パラメーター] を開き、[コード生成] 、 [カスタム コード] ペインに移動して、[シミュレーション ターゲットと同じカスタム コードの設定を使用] を有効にします。異なるソースおよびヘッダー ファイルを指定することもできます。
シミュレーションおよびコード生成用のさまざまなコマンドを実行するコードに条件を付ける場合、関数
coder.target
を使用できます。
MATLAB Function ブロックの例での coder.ceval
の使用
この例では、単純な C プログラム doubleIt
を MATLAB Function ブロックから呼び出す方法を示します。
現在の作業フォルダーにソース ファイル
doubleIt.c
を作成します。#include "doubleIt.h" double doubleIt(double u) { return(u*2.0); }
現在の作業フォルダーにヘッダー ファイル
doubleIt.h
を作成します。#ifndef MYFN #define MYFN double doubleIt(double u); #endif
新しい Simulink モデルを作成します。
myModel
として保存します。ライブラリ ブラウザーで、[Simulink] 、 [User-Defined Functions] ライブラリに移動し、MATLAB Function ブロックをモデルに追加します。
ブロックをダブルクリックして MATLAB Function ブロック エディターを開きます。
doubleIt
プログラムを呼び出すコードを入力します。function y = callingDoubleIt(u) y = 0.0; y = coder.ceval("doubleIt",u);
3.5
の値をもつ Constant ブロックを MATLAB Function ブロックの入力端子に接続します。Display ブロックを出力端子に接続します。
[コンフィギュレーション パラメーター] ウィンドウを開き、[シミュレーション ターゲット] ペインに移動します。
[コード情報] タブで、[インクルード ヘッダー] をクリックし、「
#include "doubleIt.h"
」と入力します。[ソース ファイル] タブをクリックし、「
doubleIt.c
」と入力します。[OK] をクリックします。シミュレーションを実行します。値
7
が Display ブロックに表示されます。
インポートされたバスと列挙型定義の制御
MATLAB Function ブロックまたは Stateflow® を使用して外部 C コードを呼び出すと、モデルでインポートされたバスと列挙型の型定義を制御できます。Simulink で型定義を生成するか、ユーザーによる型定義を含むヘッダー ファイルを与えることができます。この動作は、[インポートしたバスと列挙型に対して typedef を生成する] パラメーターを切り替えて制御できます。このパラメーターを見つけるには、[コンフィギュレーション パラメーター] ウィンドウを開き、[シミュレーション ターゲット] ペインに移動して、[詳細設定パラメーター] セクションを展開します。
Simulink で自動的に型定義を生成するように構成するには、[インポートしたバスと列挙型に対して typedef を生成する] を有効にします。列挙型とバス型を定義するカスタム ヘッダー ファイルを含めるには、[インポートしたバスと列挙型に対して typedef を生成する] をオフにし、[ヘッダー ファイル] テキスト ボックスでヘッダー ファイルをリストします。
参考
クラス
関数
coder.ceval
|coder.target
|coder.cinclude
|coder.updateBuildInfo
|coder.ref
|coder.rref
|coder.wref