Этот пример использует классы памяти для управления объявлениями и определениями глобальных переменных в коде C/C + +, сгенерированном из MATLAB® код. Использование классов памяти помогает вам взаимодействовать сгенерированный код с внешним кодом.
Этот пример требует Embedded Coder® лицензия.
Написание функции 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
Создайте файл c:\myfiles\myfile.c
который определяет и инициализирует импортированные глобальные переменные u
и v
.
#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
codegen
определяет, что u
, v
, x
и z
иметь тип double
. codegen
определяет и объявляет экспортированные глобальные переменные u
и z
. Он генерирует код, который инициализирует u
на 1.0
и z
на 4.0
. codegen
объявляет импортированные глобальные переменные v
и x
. Он не определяет эти переменные или не генерирует код, который инициализирует их. myfile.c
предоставляет код, который определяет и инициализирует v
и x
.
Чтобы просмотреть код, сгенерированный для глобальных переменных, откройте отчет. Щелкните ссылку View report.
Просмотр определения экспортированного глобального z
в Exported data define
раздел в addglobals.h
.
/* Definition for custom storage class: ExportedDefine */ #define z 4.0
Просмотр определения и объявления для экспортированных глобальных u
.
u
определяется в Variable Definitions
раздел в addglobals.c
.
/* Variable Definitions */ /* Definition for custom storage class: ExportedGlobal */ double u;
u
объявлен как extern
в Variable Declarations
раздел в addglobals.h
.
/* 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
объявлены как extern
в Variable Declarations
раздел в addglobals_data.h
.
/* Variable Declarations */ /* Declaration for custom storage class: ImportedExtern */ extern double v; /* Declaration for custom storage class: ImportedExternPointer */ extern double *x;