В этом примере классы хранения используются для управления объявлениями и определениями глобальных переменных в коде 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.
Для просмотра кода, созданного для глобальных переменных, откройте отчет. Щелкните ссылку Просмотр отчета.
Просмотр определения для экспортируемого глобального 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;