exponenta event banner

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