このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
coder.ceval
生成コードから C/C++ 関数を呼び出す
構文
説明
out = coder.ceval(
は、生成されたコードから functionName
,arg1,...,argN
)functionName
で指定された C/C++ 関数を呼び出します。関数呼び出し内の呼び出される C/C++ 関数に 1 つ以上の入力引数を渡すことができます。呼び出された C/C++ 関数は、単一のスカラー出力を返すことができます。たとえば、入力 myChar
と出力 isNum
をもつ C 標準関数 isalnum
を呼び出すには、isnum = coder.ceval("isalnum",myChar)
を使用します。
C/C++ 関数によって返される出力の型は、コード生成時にコード ジェネレーターによって認識されないため、coder.ceval
呼び出しの前に、out
の型を (ダミー値を代入するなどして) 指定する必要があります。非スカラー出力を保持する変数は、coder.ref
(MATLAB Coder) または coder.wref
(MATLAB Coder) を使用して、呼び出された C/C++ 関数に参照渡しすることができます。
C/C++ 標準関数を呼び出すには、coder.cinclude
(MATLAB Coder) または coder.ceval
の "-headerfile"
引数を使用してヘッダー ファイルを指定する必要があります。カスタム C/C++ 関数を呼び出すには、ヘッダー ファイルの指定に加え、coder.updateBuildInfo
(MATLAB Coder) を使用して外部ソース ファイルまたはライブラリも指定する必要があります。
関数 coder.ceval
は、生成コードでのみ使用できます。MATLAB® の実行中に coder.ceval
を呼び出すとエラーが発生します。MATLAB 関数が MATLAB で実行されているかどうかを判断するには、coder.target
(MATLAB Coder) を使用します。
out = coder.ceval(
は、options
,functionName
,arg1,...,argN
)options
引数で指定されたオプションを使用して、生成されたコードから functionName
で指定された C/C++ 関数を呼び出します。たとえば、C/C++ ヘッダー ファイルを指定するには "-headerfile"
を使用し、呼び出される C/C++ 関数でグローバル変数を使用することを示すには "-global"
を使用します。
例
coder.ceval
を使用して、生成コードから C 標準ライブラリ関数 cosh()
を呼び出します。
角度 (ラジアン単位) を表す double
型の入力を受け取り、C 関数 cosh()
を使用してその角度の双曲線余弦を計算する MATLAB 関数 callCosh
を作成します。coder.ceval
を使用して cosh()
を呼び出し、coder.cinclude
を使用して cosh()
が定義されている math.h
ヘッダー ファイルを含めます。math.h
を山かっこ <>
で囲み、math.h
が C 標準ヘッダー ファイルであることを示します。
coder.ceval
呼び出しによって返される出力の型はコード生成時には不明なため、型が以前の代入によって既に定義されている変数に出力を代入することで、coder.ceval
呼び出しの出力を既知の型に変換する必要があります。この事前の代入を行わないと、コード生成に失敗します。
MATLAB の実行中に coder.ceval
を呼び出すとエラーが発生します。coder.target
(MATLAB Coder)を使用して、coder.ceval
呼び出しの前に callCosh
が生成コードで実行されていることを確認してください。
type callCosh.m
function out = callCosh(x) arguments x (1,1) double end out = 0; % assign a dummy value to specify variable type if coder.target("MATLAB") disp("This function not supported in MATLAB execution"); else coder.cinclude("<math.h>") out = coder.ceval("cosh",x); end end
MATLAB で callCosh
をテストします。callCosh
は coder.ceval
を呼び出しません。
x = callCosh(1);
This function not supported in MATLAB execution
callCosh
の MEX 関数を生成します。
codegen callCosh
Code generation successful.
角度 ラジアンを使用して、生成された MEX 関数 callCosh_mex
をテストします。callCosh
は生成コードで実行されるため、coder.ceval
の呼び出しでエラーは発生しません。
callCosh_mex(pi)
ans = 11.5920
callCosh
の C コードを生成し、生成コードを検査します。生成される C 関数には、cosh()
の呼び出しが含まれます。
codegen -config:lib callCosh
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","callCosh","callCosh.c"))
/* * Prerelease License - for engineering feedback and testing purposes * only. Not for sale. * File: callCosh.c * * MATLAB Coder version : 25.1 * C/C++ source code generated on : 01-Feb-2025 08:01:58 */ /* Include Files */ #include "callCosh.h" #include <math.h> /* Function Definitions */ /* * Arguments : double x * Return Type : double */ double callCosh(double x) { /* assign a dummy value to specify variable type */ return cosh(x); } /* * File trailer for callCosh.c * * [EOF] */
coder.ceval
を使用して生成コードから C 関数 fopen()
、fclose()
、および fscanf()
を呼び出し、これらの関数を使用してコンマ区切り値を含むテキスト ファイルの最初の行を読み取ります。これらの C 関数に相当する MATLAB 関数であるfopen
、fclose
、およびfscanf
が、コード生成でサポートされています。この例では、C ファイル I/O 関数を直接呼び出す方法を示します。
coder.ceval
を使用して C ファイル I/O 関数 fopen()
、fclose()
、および fscanf()
を呼び出すことで、テキスト ファイル data.csv
の最初の行を返す MATLAB 関数 useCFileIO
を作成します。山かっこと共に coder.cinclude
を使用して、C ファイル I/O 関数が定義されている C 標準ヘッダー ファイル stdio.h
を生成コードに含めます。coder.opaque
(MATLAB Coder)を使用して、ファイル ポインターを格納する変数を、初期値 NULL
をもつ FILE *
型変数として初期化します。
coder.ceval
は配列出力をサポートしていないため、coder.wref
を使用して、出力変数 out
を C 関数 fscanf()
に参照渡しします。コード生成時には out
の型が不明なため、coder.ceval
呼び出しの前にダミー値を使用してこの変数を初期化します。この代入を行わないと、コード生成に失敗します。coder.ceval
を使用して呼び出される C/C++ 関数に MATLAB 文字ベクトルを渡すには、各文字ベクトルの終端を明示的に null 文字 (0
) とする必要があります。詳細については、MATLAB 文字列および文字の行ベクトルからの C/C++ 文字列の生成 (MATLAB Coder)を参照してください。
MATLAB の実行中に coder.ceval
を呼び出すとエラーが発生します。coder.target
を使用して、coder.ceval
呼び出しの前に useCFileIO
が生成コードで実行されていることを確認してください。
type useCFileIO.m
function out = useCFileIO %#codegen fileName = 'data.csv'; if coder.target("MATLAB") fid = fopen(fileName); out = fscanf(fid, "%f,%f,%f",3); fclose(fid); else coder.cinclude("<stdio.h>") fileName = [fileName 0]; fileMode = ['r' 0]; fileFormat = ['%lf,%lf,%lf' 0]; fileHandle = coder.opaque("FILE*", "NULL"); fileHandle = coder.ceval("fopen", fileName, fileMode); out = [0,0,0]; coder.ceval("fscanf", fileHandle, fileFormat, ... coder.wref(out), coder.wref(out(2)), coder.wref(out(3))); coder.ceval("fclose", fileHandle); end
useCFileIO
の MEX 関数を生成してテストします。
codegen useCFileIO
Code generation successful.
out = useCFileIO_mex
out = 1×3
0.7071 0.6690 0.5985
useCFileIO
の C コードを生成し、生成コードを検査します。生成される C 関数は、fopen()
、fclose()
および fscanf()
を直接呼び出します。
codegen -config:lib -c useCFileIO
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","useCFileIO","useCFileIO.c"))
/* * Prerelease License - for engineering feedback and testing purposes * only. Not for sale. * File: useCFileIO.c * * MATLAB Coder version : 25.1 * C/C++ source code generated on : 01-Feb-2025 08:01:52 */ /* Include Files */ #include "useCFileIO.h" #include <stdio.h> /* Function Definitions */ /* * Arguments : double out[3] * Return Type : void */ void useCFileIO(double out[3]) { static const char b_fileFormat[12] = "%lf,%lf,%lf"; static const char b_fileName[9] = "data.csv"; FILE *fileHandle; int i; char fileFormat[12]; char fileName[9]; for (i = 0; i < 9; i++) { fileName[i] = b_fileName[i]; } char fileMode[2]; fileMode[0] = 'r'; fileMode[1] = '\x00'; fileHandle = fopen(&fileName[0], &fileMode[0]); out[0] = 0.0; out[1] = 0.0; out[2] = 0.0; for (i = 0; i < 12; i++) { fileFormat[i] = b_fileFormat[i]; } fscanf(fileHandle, &fileFormat[0], &out[0], &out[1], &out[2]); fclose(fileHandle); } /* * File trailer for useCFileIO.c * * [EOF] */
MATLAB 関数 addTwo
からカスタム C 関数 myAdd()
を呼び出します。
カスタム C 関数の作成
C ヘッダー ファイル myAdd.h
を作成します。このヘッダー ファイルで、double
型の入力引数を 2 つ受け入れ、double
型の値を返す関数 myAdd()
を宣言します。
type myAdd.h
double myAdd(double a, double b);
2 つの入力引数を加算する C 関数 myAdd()
を作成します。関数を myAdd.c
に保存して、ヘッダー ファイル myAdd.h
を含めます。
type myAdd.c
#include <stdio.h> #include <stdlib.h> #include "myAdd.h" double myAdd(double a, double b) { return a + b; }
カスタム C 関数を呼び出す MATLAB 関数の作成
coder.ceval
を使用してカスタム C 関数 myAdd()
を呼び出す MATLAB 関数 addTwo
を作成します。C 関数 myAdd()
を再現するローカル MATLAB 関数 myAddML
を作成します。coder.target
(MATLAB Coder)を使用して、addTwo
が、MATLAB で実行される際にローカル MATLAB 関数 myAddML
を呼び出し、生成コードで実行される際に C 関数 myAdd()
を呼び出すことを確認します。coder.updateBuildInfo
(MATLAB Coder)を使用して関数 myAdd()
を含む C ファイルを検索する場所をコンパイラに伝え、"-headerfile"
オプションを指定した coder.ceval
を使用して myAdd.h
ヘッダー ファイルを含めるようコード ジェネレーターに指示します。
type addTwo.m
function z = addTwo(x,y) %#codegen arguments x (1,1) double; y (1,1) double; end z = 0; if coder.target("MATLAB") % Executing in MATLAB, call local MATLAB function z = myAddML(x,y); else % Executing in generated code, call C function coder.updateBuildInfo("addSourceFiles","myAdd.c"); z = coder.ceval("-headerfile","myAdd.h","myAdd",x,y); end end function out = myAddML(a,b) arguments a (1,1) double b (1,1) double end out = a + b; end
MEX 関数の生成とテスト
addTwo
の MEX 関数を生成し、addTwo_mex
の出力が、同じ入力に対する addTwo
の出力と一致することを確認します。
codegen addTwo
Code generation successful.
addTwo(4,5)
ans = 9
addTwo_mex(4,5)
ans = 9
C コードの生成と検査
-config:lib
オプションを指定した codegen
コマンドを使用して、コマンド ラインで addTwo
からスタンドアロン C ライブラリとしてパッケージ化された C コードを生成します。生成される C コードには、C 関数 myAdd()
への呼び出しとともに #include "myAdd.h"
命令が含まれます。
codegen -config:lib addTwo.m
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","addTwo","addTwo.c"))
/* * Prerelease License - for engineering feedback and testing purposes * only. Not for sale. * File: addTwo.c * * MATLAB Coder version : 25.1 * C/C++ source code generated on : 01-Feb-2025 08:02:19 */ /* Include Files */ #include "addTwo.h" #include "myAdd.h" /* Function Definitions */ /* * Arguments : double x * double y * Return Type : double */ double addTwo(double x, double y) { /* Executing in generated code, call C function */ return myAdd(x, y); } /* * File trailer for addTwo.c * * [EOF] */
C++ では、メンバー関数 (メソッドとも呼ばれる) は特定のクラスまたはオブジェクトに関連付けられた関数です。coder.ceval
を使用して、生成コードからカスタム C++ クラス MyClass
のパブリック メソッドを呼び出します。
単純な C++ クラスの作成
この例の目的は、ファイル MyClass.hpp
に C++ クラス MyClass
を作成することです。このヘッダー ファイルで、定数値を返す関数 getValue()
を定義します。
type MyClass.hpp
class MyClass { public: double getValue() const { return 3.14; } };
生成コードからのメンバー関数の呼び出し
C++ メンバー関数 getValue()
を呼び出す MATLAB 関数 callGetValue
を作成します。coder.opaque
(MATLAB Coder)を使用して、変数 instanceOfMyClass
を C++ クラス MyClass
のインスタンスとして宣言します。"HeaderFile"
引数を使用して、MyClass
がヘッダー ファイル MyClass.hpp
で定義されていることを示します。
coder.ceval
を使用して生成コードから getValue()
を呼び出すには、C++ 関数テンプレート std:mem_fn
を使用して getValue()
にアクセスします。この関数テンプレートは、C++ 標準ヘッダー <functional>
で定義されています。coder.ref を使用して getValue()
に instanceOfMyClass
を渡し、コード ジェネレーターにこの変数を値ではなく参照で渡すよう強制します。
type callGetValue.m
function out = callGetValue instanceOfMyClass = coder.opaque("MyClass", "MyClass{}", "HeaderFile", "MyClass.hpp"); out = 0; out = coder.ceval("-headerfile", "<functional>", ... "std::mem_fn(&MyClass::getValue)", coder.ref(instanceOfMyClass)); end
MEX 関数の生成とテスト
callGetValue
の MEX 関数を生成し、MEX 関数で期待した出力が生成されることを確認します。C++ MEX 関数を生成するには、codegen コマンドで -lang:C++
を指定します。
codegen -lang:c++ callGetValue
Code generation successful.
callGetValue_mex
ans = 3.1400
C++ コードの生成と検査
-config:lib
オプションおよび -lang:c++
オプションを指定した codegen
コマンドを使用して、コマンド ラインで callGetValue
からスタンドアロン C++ ライブラリとしてパッケージ化された C++ コードを生成します。生成された C++ コードは MyClass
のインスタンスを作成し、メンバー関数 getValue()
を呼び出します。
codegen -config:lib -lang:c++ callGetValue
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","callGetValue","callGetValue.cpp"))
// // Prerelease License - for engineering feedback and testing purposes // only. Not for sale. // File: callGetValue.cpp // // MATLAB Coder version : 25.1 // C/C++ source code generated on : 01-Feb-2025 08:02:24 // // Include Files #include "callGetValue.h" #include "MyClass.hpp" #include <functional> // Function Definitions // // Arguments : void // Return Type : double // double callGetValue() { MyClass instanceOfMyClass; instanceOfMyClass = MyClass{}; return std::mem_fn(&MyClass::getValue)(&instanceOfMyClass); } // // File trailer for callGetValue.cpp // // [EOF] //
coder.ceval
を使用して、カスタム C/C++ ライブラリで定義された C/C++ 関数を呼び出すことができます。これらの関数には、独自の初期化関数と終了関数をもつものがあります。
カスタム C 関数およびライブラリの作成
この例の目的は、区間 [min
, max]
における の定積分を計算する MATLAB 関数 integrateSquare
を作成することです。integrateSquare
のスタンドアロン C ライブラリを生成します。
type integrateSquare.m
function out = integrateSquare(min,max) arguments min (1,1) double max (1,1) double end f = @(x) x.^2; out = integral(f, min, max); end
codegen -config:lib integrateSquare
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
codegen/lib/integrateSquare
ディレクトリにある生成された C コードを検査します。同じディレクトリに、integrateSquare
ライブラリとヘッダー ファイルに加え、関数 integrateSquare_initialize()
および integrateSquare_terminate()
の定義が含まれたファイルがあります。
type(fullfile("codegen","lib","integrateSquare","integrateSquare.c"))
/* * Prerelease License - for engineering feedback and testing purposes * only. Not for sale. * File: integrateSquare.c * * MATLAB Coder version : 25.1 * C/C++ source code generated on : 01-Feb-2025 08:02:03 */ /* Include Files */ #include "integrateSquare.h" #include "integral.h" #include "rt_nonfinite.h" /* Function Definitions */ /* * Arguments : double b_min * double b_max * Return Type : double */ double integrateSquare(double b_min, double b_max) { return integral(b_min, b_max); } /* * File trailer for integrateSquare.c * * [EOF] */
カスタム C 関数を呼び出す MATLAB 関数の作成
coder.ceval
を使用してカスタム C 関数 integrateSquare()
を呼び出す MATLAB 関数 callIntegrateSquare
を作成します。この例の目的は、integrateSquare()
呼び出しの前に関数 integrateSquare_initialize()
を呼び出し、その後、関数 integrateSquare_terminate()
を呼び出すことです。
coder.updateBuildInfo
(MATLAB Coder)を使用して、integrateSquare()
ライブラリおよびその他のファイルを含むディレクトリをインクルード パスに追加します。関数 coder.updateBuildInfo
の呼び出しでは、START_DIR
マクロを使用して現在の作業フォルダーを参照できます。このマクロは、コード生成用の MATLAB コードでのみ使用できます。MATLAB Coder はプラットフォーム固有の拡張子をもつスタティック ライブラリ ファイルを生成するため、ispc
を使用して、ご使用のプラットフォームに適した拡張子を使用していることを確認してください。
type callIntegrateSquare.m
function out = callIntegrateSquare(x,y) %#codegen arguments x (1,1) double y (1,1) double end if coder.target("MATLAB") disp("Calling MATLAB function"); out = integrateSquare(x,y); else disp("Calling custom C function"); out = 0; coder.updateBuildInfo("addIncludePaths", ... "$(START_DIR)/codegen/lib/integrateSquare"); if ispc coder.updateBuildInfo("addLinkObjects","integrateSquare.lib", ... "$(START_DIR)/codegen/lib/integrateSquare","",true,true); else coder.updateBuildInfo("addLinkObjects","integrateSquare.a", ... "$(START_DIR)/codegen/lib/integrateSquare","",true,true); end coder.ceval("-headerfile","integrateSquare_initialize.h", ... "integrateSquare_initialize"); out = coder.ceval("-headerfile","integrateSquare.h","integrateSquare", ... x,y); coder.ceval("-headerfile","integrateSquare_terminate.h", ... "integrateSquare_terminate"); end end
MEX 関数の生成とテスト
callIntegrateSquare
の MEX 関数を生成します。MATLAB と MEX 関数の結果が一致していることを確認します。
codegen callIntegrateSquare
Code generation successful.
callIntegrateSquare(-2,2)
Calling MATLAB function
ans = 5.3333
callIntegrateSquare_mex(-2,2)
Calling custom C function
ans = 5.3333
C コードの生成と検査
callIntegrateSquare
のスタンドアロン C ライブラリを生成し、生成コード内の integrateSquare_initialize()
、integrateSquare()
、および integrateSquare_terminate()
の呼び出しを検査します。
codegen -config:lib callIntegrateSquare
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
type(fullfile("codegen","lib","callIntegrateSquare","callIntegrateSquare.c"))
/* * Prerelease License - for engineering feedback and testing purposes * only. Not for sale. * File: callIntegrateSquare.c * * MATLAB Coder version : 25.1 * C/C++ source code generated on : 01-Feb-2025 08:02:13 */ /* Include Files */ #include "callIntegrateSquare.h" #include "coder_platform.h" #include "integrateSquare.h" #include "integrateSquare_initialize.h" #include "integrateSquare_terminate.h" /* Function Definitions */ /* * Arguments : double x * double y * Return Type : double */ double callIntegrateSquare(double x, double y) { double out; coderIsPC(); integrateSquare_initialize(); out = integrateSquare(x, y); integrateSquare_terminate(); return out; } /* * File trailer for callIntegrateSquare.c * * [EOF] */
複素数入力を取るカスタム C コードを呼び出す MATLAB 関数があるとします。MATLAB 関数からの複素数入力を C コードにマッピングできるように C コードの入力パラメーターを定義しなければなりません。
生成されたコードでは、複素数は re
と im
の 2 つのフィールドをもつ struct
として定義されます。これらのフィールドは、それぞれ複素数の実数部と虚数部です。この struct
は、現在のパスの codegen\lib\functionName
フォルダーにあるヘッダー ファイル rtwtypes.h
で定義されます。struct
は次のように定義されます。
typedef struct { real32_T re; /*Real Component*/ real32_T im; /*Imaginary Component*/ } creal_T;
詳細については、生成コードの型への MATLAB 型のマッピング (MATLAB Coder)を参照してください。
統合する C コードには rtwtypes.h
ヘッダー ファイルを含めなければなりません。C コード例 foo.c
を次に示します。
#include "foo.h" #include<stdio.h> #include<stdlib.h> #include "rtwtypes.h" double foo(creal_T x) { double z = 0.0; z = x.re*x.re + x.im*x.im; return (z); }
struct
の名前は creal_T
です。ヘッダー ファイル foo.h
も次のように定義しなければなりません。
#include "rtwtypes.h" double foo(creal_T x);
MATLAB コードは、複素数入力をもつ関数 coder.ceval
を使用して foo.c
を実行します。
function y = complexCeval %#codegen y = 0.0; coder.updateBuildInfo("addSourceFiles","foo.c"); coder.cinclude("foo.h"); y = coder.ceval("foo", 10+20i); end
coder.ceval
コマンドは複素数入力を取ります。コード ジェネレーターは、複素数を struct creal_T
の変数 x
とそのフィールド re
および im
にマッピングします。次のコマンドを実行して関数 complexCeval
のコードを生成します。
codegen -config:lib -report complexCeval
入力引数
生成コードで実行される C/C++ 関数の名前。string スカラーまたは文字ベクトルとして指定します。functionName
はコード生成時に定数でなければなりません。
例: x = coder.ceval("myFunction")
例: coder.ceval("myFunction")
データ型: char
| string
呼び出される C/C++ 関数の引数。文字ベクトル、配列、配列の要素、構造体、構造体フィールド、またはオブジェクト プロパティのコンマ区切りリストとして、関数に必要な順序で指定します。string スカラーおよび string 配列はサポートされません。
既定では、C/C++ が引数の値渡しをサポートするときはいつでも、coder.ceval
は呼び出された C/C++ 関数に引数を値渡しします。coder.ceval
に引数を参照渡しするよう強制するには、coder.ref
(MATLAB Coder)、coder.rref
(MATLAB Coder)、および coder.wref
(MATLAB Coder) 構成を使用します。引数が配列である場合など、C/C++ が引数の値渡しをサポートしない状況では、coder.ceval
は引数を参照渡しします。coder.ref
、coder.rref
、または coder.wref
を使用しないと、C/C++ 関数の引数のコピーが生成コードに現れ、配列に対して MATLAB セマンティクスを強制する可能性があります。
例: x = coder.ceval("tolower",myChar)
例: coder.ceval("myFunction",coder.ref(x))
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| struct
複素数のサポート: あり
coder.ceval
によって評価される C/C++ 関数呼び出しのオプション。オプション値またはオプション値のコンマ区切りリストとして指定します。関数 coder.ceval
には複数のオプションを指定することができ、オプションは任意の順序で表記できます。すべてのオプション ("headerfile
" を含む) は、コード生成時に定数でなければなりません。以下の表に、coder.ceval
で使用できるオプションを示します。
オプション | 説明 |
---|---|
"-global" | coder.ceval によって呼び出される C/C++ 関数が、1 つ以上のグローバル変数を使用することを指定します。-global オプションを指定すると、呼び出される C/C++ 関数でのグローバル変数の使用を妨げる可能性のある特定のコード生成の最適化が抑制されます。 |
"-gpudevicefcn" | coder.ceval によって呼び出される C/C++ 関数が GPU デバイス上にあることを指定します。このオプションを指定すると、カーネル内から CUDA® GPU 関数 __device__ を呼び出すことができます。このオプションには GPU Coder™ ライセンスが必要です。 |
"-headerfile","headerfile" |
C/C++ 標準ヘッダー ファイルを含めるには、ヘッダー ファイルの名前を山かっこ
非標準ヘッダー ファイルを含めるには、山かっこを省略します。生成された
インクルード パスを指定するには、 |
"-layout:any" | 配列のレイアウトが一致しない場合でも、データ レイアウトを変更せずに、生成コードと呼び出された C/C++ 関数間で入出力データを渡します。 |
"-layout:rowMajor" または "-row" | 生成コードと呼び出された C/C++ 関数間で、入出力データを行優先のレイアウトで渡します。列優先のレイアウトを使用する MATLAB 関数または MATLAB Function ブロックから呼び出されると、コード ジェネレーターは入力を行優先のレイアウトに変換し、出力を列優先のレイアウトに変換します。 |
"-layout:columnMajor" または "-col" | 生成コードと呼び出された C/C++ 関数間で、入出力データを列優先のレイアウトで渡します。行優先のレイアウトを使用する MATLAB 関数または MATLAB Function ブロックから呼び出されると、コード ジェネレーターは入力を列優先のレイアウトに変換し、出力を行優先のレイアウトに変換します。この動作は既定です。 |
例: coder.ceval("-headerfile","myHeader.h","-layout:rowMajor","-global","myFunction",coder.rref(in),coder.wref(out));
制限
coder.extrinsic
(MATLAB Coder) を使用して外部関数として宣言した関数では、coder.ceval
を使用することはできません。プロパティに get メソッド、set メソッド、または検証関数がある場合、またはプロパティがプロパティ値を制約または変更する属性をもつ System object™ プロパティである場合、そのプロパティを外部関数に参照で渡すことはできません。一部のプロパティでサポートされない参照渡しを参照してください。
可変サイズの行列は、行優先のコード生成ではエントリポイント パラメーターとしてサポートされていません。
MATLAB コードで初期化されている配列のサイズは、
coder.ceval
を使用して変更できません。
ヒント
ポインター、
FILE
型のファイル I/O、C/C++ マクロなど、MATLAB コードに存在しない変数の型を受け入れるまたは返す C/C++ 関数の呼び出しにcoder.ceval
を使用するには、関数coder.opaque
を使用します。coder.ceval
を使用して呼び出される外部コードと生成コードは、同じプロセス内で実行され、メモリを共有します。生成コードで使用されるデータ構造体を含むメモリに外部コードが誤って書き込みを行うと、予期しない動作やクラッシュが生じる可能性があります。たとえば、外部コードが終点より後の配列にデータを書き込もうとすると、生成コードが予期しない動作をするか、クラッシュする可能性があります。MATLAB は Windows® プラットフォームで UTF-8 をシステム エンコードとして使用します。その結果、生成された MEX 関数内から行われたシステム呼び出しは、UTF-8 でエンコードされた string を受け入れて返します。一方、MATLAB Coder™ で生成されたコードは、Windows ロケールで指定されたエンコードを使用してテキスト データを符号化します。このため、MATLAB のエントリポイント関数が
coder.ceval
(MATLAB Coder) を使用して異なるシステム エンコードを想定する外部 C/C++ 関数を呼び出すと、生成された MEX 関数から文字化けが発生する可能性があります。これが発生した場合は、外部 C/C++ 関数を更新する必要があります。coder.ceval
を使用して呼び出される C/C++ 関数に MATLAB 文字ベクトルを渡すには、各文字ベクトルの終端を明示的に null 文字 (0
) とする必要があります。詳細については、MATLAB 文字列および文字の行ベクトルからの C/C++ 文字列の生成 (MATLAB Coder)を参照してください。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
関数 coder.ceval
は、HDL Coder™ での MATLAB から高位合成 (HLS) へのワークフローのみをサポートします。
バージョン履歴
R2011a で導入R2024a 以降では、名前と値の引数 "-headerfile"
を使用して、C/C++ 関数のヘッダー ファイルを coder.ceval
呼び出し内で指定できます。R2024a より前は、coder.ceval
の前に別途 coder.cinclude
を呼び出してヘッダー ファイルを指定する必要がありました。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)