coder.storageClass

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

Синтаксис

coder.storageClass(global_name, storage_class)

Описание

пример

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)

% 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 "rt_nonfinite.h"
    #include "addglobals_ex.h"
    #include "addglobals_ex_initialize.h"
    
    /* Named Constants */
    #define b_myglobalone                     (1.0)
    
    /* Function Definitions */
    
    /*
     * Arguments    : void
     * Return Type  : void
     */
    void addglobals_ex_initialize(void)
    {
      rt_InitInfAndNaN(8U);
      myglobalone = b_myglobalone;
    }
    

В функциональном 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. Для вывода type'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