MATLAB コードから生成されたコード内のグローバル変数の宣言および定義の制御
この例では、ストレージ クラスを使用して、MATLAB® コードから生成される C/C++ コード内のグローバル変数の宣言および定義を制御します。ストレージ クラスを使用すると、生成されたコードと外部コードをインターフェイスを介して連携させるのに役立ちます。
この例では、Embedded Coder® ライセンスが必要です。
4 つのグローバル変数を加算する関数 addglobals を記述します。関数内でグローバル変数を宣言します。
function y = addglobals %#codegen % Define the global variables. global u; global v; global x; global z; % Assign the storage classes. coder.storageClass('u','ExportedGlobal'); coder.storageClass('v','ImportedExtern'); coder.storageClass('x','ImportedExternPointer'); coder.storageClass('z','ExportedDefine'); y = u + v + x + z; end
インポートされるグローバル変数 u および v を定義および初期化するファイル c:\myfiles\myfile.c を作成します。
#include <stdio.h> /* Variable definitions for imported variables */ double v = 1.0; double *x = &v;
コード構成オブジェクトを作成します。myfile.c を含めるようにコード生成パラメーターを構成します。出力タイプが 'lib' の場合やソース コードのみを生成する場合は、このファイルを提供せずにコードを生成できます。それ以外の場合は、このファイルを提供する必要があります。
cfg = coder.config('dll','ecoder', true); cfg.CustomSource = 'myfile.c'; cfg.CustomInclude = 'c:\myfiles';
コードを生成します。この例では、-globals 引数を使用して、グローバル変数 u、v、x、および z の型と初期値を指定します。代わりに、MATLAB グローバル ワークスペースでグローバル変数を定義することもできます。インポートされるグローバル変数 v および x については、コード ジェネレーターは初期値のみを使用して型を決定します。
codegen -config cfg -globals {'u', 1, 'v', 2, 'x', 3, 'z', 4} addglobals -report
初期値の 1、2、3、および 4 から、u、v、x、および z が double 型であると codegen で特定されます。codegen により、エクスポートされるグローバル変数 u と z が定義および宣言されます。u を 1.0 に、z を 4.0 に初期化するコードが生成されます。codegen により、インポートされるグローバル変数 v と x が宣言されます。これらの変数は定義されず、これらを初期化するコードも生成されません。v と x を定義および初期化するコードは myfile.c から提供されます。
グローバル変数に対して生成されたコードを表示するには、レポートを開きます。[レポートの表示] リンクをクリックします。
addglobals.h の Exported data define セクション内のエクスポートされるグローバル z の定義を表示します。
/* Definition for custom storage class: ExportedDefine */ #define z 4.0
エクスポートされるグローバル u の定義と宣言を表示します。
uはaddglobals.cのVariable Definitionsセクションで定義されています。/* Variable Definitions */ /* Definition for custom storage class: ExportedGlobal */ double u;
uはaddglobals.hのVariable Declarationsセクションでexternとして宣言されています。/* Variable Declarations */ /* Declaration for custom storage class: ExportedGlobal */ extern double u;
uはaddglobals_initialize.cで初期化されています。/* Include Files */ #include "addglobals_initialize.h" #include "addglobals.h" #include "addglobals_data.h" /* Function Definitions */ /* * Arguments : void * Return Type : void */ void addglobals_initialize(void) { u = 1.0; isInitialized_addglobals = true; }
インポートされる外部グローバル v とインポートされる外部グローバル ポインター x の定義と宣言を表示します。
v と x は addglobals_data.h の Variable Declarations セクションで extern として宣言されています。
/* Variable Declarations */ /* Declaration for custom storage class: ImportedExtern */ extern double v; /* Declaration for custom storage class: ImportedExternPointer */ extern double *x;