coder.storageClass

Присвоение класса памяти глобальной переменной

Описание

пример

coder.storageClass(global_name, storage_class) назначает класс памяти storage_class в глобальную переменную global_name.

Присвойте класс памяти глобальной переменной в функции, которая объявляет глобальную переменную. Вам не нужно присваивать класс памяти в нескольких функциях.

У вас должен быть Embedded Coder® лицензия на использование coder.storageClass. Только когда вы используете проект Embedded Coder или объект строения для генерации библиотек или исполняемых файлов C/C + +, программное обеспечение генерации кода распознаетcoder.storageClass вызовы.

Примеры

свернуть все

В функции addglobals_ex, назначьте 'ExportedGlobal' класс памяти для глобальной переменной myglobalone и 'ExportedDefine' класс памяти для глобальной переменной myglobaltwo.

function y = addglobals_ex(x) %#codegen
% Define the global variables.
global myglobalone;
global myglobaltwo;

% Assign the storage classes.
coder.storageClass('myglobalone','ExportedGlobal');
coder.storageClass('myglobaltwo','ExportedDefine');
y = myglobalone + myglobaltwo + x;
end

Создайте объект строения кода для библиотеки или исполняемого файла.

cfg = coder.config('dll','ecoder', true);

Сгенерируйте код. Этот пример использует -globals аргумент для определения типов и начальных значений myglobalone и myglobaltwo. Кроме того, можно задать глобальные переменные в MATLAB® глобальная рабочая область. Чтобы задать тип входного параметра x, используйте -args опция.

codegen -config cfg -globals {'myglobalone', 1, 'myglobaltwo', 2} -args {1} addglobals_ex -report

Из начальных значений 1 и 2, codegen определяет, что myglobalone и myglobaltwo иметь тип double. codegen определяет и объявляет экспортированные переменные myglobalone и myglobaltwo. Он генерирует код, который инициализирует myglobalone на 1.0 и myglobaltwo на 2.0.

Чтобы просмотреть сгенерированный код для myglobaltwo и myglobalone, нажмите на View report ссылка.

  • myglobaltwo определяется в Exported data define раздел в addglobals_ex.h.

    /* Exported data define */
    
    /* Definition for custom storage class: ExportedDefine */
    #define myglobaltwo                    2.0
    
  • myglobalone определяется в Variable Definitions раздел в addglobals_ex.c.

    /* Variable Definitions */
    /* Definition for custom storage class: ExportedGlobal */
    double myglobalone;
  • myglobalone объявлен как extern в Variable Declarations раздел в addglobals_ex.h.

    /* Variable Declarations */
    /* Declaration for custom storage class: ExportedGlobal */
    extern double myglobalone;
  • myglobalone инициализируется в addglobals_ex_initialize.c.

    /* Include Files */
    #include "addglobals_ex_initialize.h"
    #include "addglobals_ex.h"
    #include "addglobals_ex_data.h"
    
    /* Function Definitions */
    
    /*
     * Arguments    : void
     * Return Type  : void
     */
    void addglobals_ex_initialize(void)
    {
      myglobalone = 1.0;
      isInitialized_addglobals_ex = true;
    }

В функции addglobal_im, назначьте 'ImportedExtern' класс памяти для глобальной переменной myglobal.

function y = addglobal_im(x)

% Define the global variable.

global myglobal;

% Assign the storage classes.

coder.storageClass('myglobal','ImportedExtern');
y = myglobal + x;
end

Создайте файл c:\myfiles\myfile.c который определяет и инициализирует импортированную переменную myglobal.

#include <stdio.h>

/* Variable definitions for imported variables */ 
double myglobal = 1.0;

Создайте объект строения кода. Сконфигурируйте параметры генерации кода, чтобы они включали myfile.c. Для выхода 'lib'или, если вы генерируете только исходный код, можно сгенерировать код, не предоставляя этот файл. В противном случае необходимо предоставить этот файл.

cfg = coder.config('dll','ecoder', true);
cfg.CustomSource = 'myfile.c';
cfg.CustomInclude = 'c:\myfiles';

Сгенерируйте код. Этот пример использует -globals аргумент для определения типа и начального значения myglobal. Кроме того, можно задать глобальные переменные в глобальной рабочей области MATLAB. Для импортированных глобальных переменных программное обеспечение генерации кода использует начальные значения, чтобы определить только тип.

codegen -config cfg -globals {'myglobal', 1} -args {1}  addglobal_im -report

Из начального значения 1, codegen определяет, что myglobal имеет тип double. codegen объявляет импортированную глобальную переменную myglobal. Он не определяет myglobal или сгенерировать код, который инициализирует myglobal. myfile.c предоставляет код, который определяет и инициализирует myglobal.

Чтобы просмотреть сгенерированный код для myglobal, нажмите на View report ссылка.

myglobal объявлен как extern в Variable Declarations раздел в addglobal_im_data.h.

/* Variable Declarations */
/* Declaration for custom storage class: ImportedExtern */
extern double myglobal;

В функции addglobal_imptr, назначьте 'ImportedExternPointer' класс памяти для глобальной переменной myglobal.

function y = addglobal_imptr(x)

% Define the global variable.

global myglobal;

% Assign the storage classes.

coder.storageClass('myglobal', 'ImportedExternPointer');
y = myglobal + x;
end

Создайте файл c:\myfiles\myfile.c который определяет и инициализирует импортированную глобальную переменную myglobal.

#include <stdio.h>

/* Variable definitions for imported variables */
double v = 1.0; 
double *myglobal = &v;

Создайте объект строения кода. Сконфигурируйте параметры генерации кода, чтобы они включали myfile.c. Для выхода 'lib'или, если вы генерируете только исходный код, можно сгенерировать код, не предоставляя этот файл. В противном случае необходимо предоставить этот файл.

cfg = coder.config('dll','ecoder', true);
cfg.CustomSource = 'myfile.c';
cfg.CustomInclude = 'c:\myfiles';

Сгенерируйте код. Этот пример использует -globals аргумент для задания типа и начального значения глобальной переменной myglobal. Кроме того, можно задать глобальные переменные в глобальной рабочей области MATLAB. Для импортированных глобальных переменных программное обеспечение генерации кода использует начальные значения, чтобы определить только тип.

codegen -config cfg -globals {'myglobal', 1} -args {1} addglobal_imptr -report

Из начального значения 1, codegen определяет, что myglobal имеет тип double. codegen объявляет импортированную глобальную переменную myglobal. Он не определяет myglobal или сгенерировать код, который инициализирует myglobal. myfile.c предоставляет код, который определяет и инициализирует myglobal.

Чтобы просмотреть сгенерированный код для myglobal, нажмите на View report ссылка.

myglobal объявлен как extern в Variable Declarations раздел в addglobal_imptr_data.h.

/* Variable Declarations */
/* Declaration for custom storage class: ImportedExternPointer */
extern double *myglobal;

Входные параметры

свернуть все

global_name - имя глобальной переменной, заданное как вектор символов. global_name должен быть константой времени компиляции.

Пример: 'myglobal'

Типы данных: char

Класс памяти для назначения global_var. storage_class может иметь одно из следующих значений.

Класс памятиОписание
'ExportedGlobal'
  • Определяет переменную в Variable Definitions раздел файла C entry_point_name.c.

  • Объявляет переменную как extern в Variable Declarations раздел файла заголовка entry_point_name.h

  • Инициализирует переменную в функции entry_point_name_initialize.h.

'ExportedDefine'

Объявляет переменную с #define директива в Exported data define раздел файла заголовка entry_point_name.h.

'ImportedExtern'

Объявляет переменную как extern в Variable Declarations раздел файла заголовка entry_point_name_data.h. Внешний код должен предоставить определение переменной.

'ImportedExternPointer'

Объявляет переменную как extern указатель на Variable Declarations раздел файла заголовка entry_point_name_data.h. Внешний код должен определять допустимую переменную указателя.

  • Если вы не назначаете класс памяти глобальной переменной, за исключением расположения объявления, переменная ведет себя так, как она имеет 'ExportedGlobal' класс памяти. Для 'ExportedGlobal' класс памяти, глобальная переменная объявлена в файле entry_point_name.h. Когда глобальная переменная не имеет класса памяти, переменная объявляется в файле entry_point_name_data.h.

Типы данных: char

Ограничения

  • После присвоения класса памяти глобальной переменной нельзя назначить другой класс памяти этой глобальной переменной.

  • Вы не можете назначить класс памяти постоянной глобальной переменной.

Введенный в R2015b