Управляйте объявлениями и определениями глобальных переменных в коде, сгенерированном из кода MATLAB

Этот пример использует классы памяти, чтобы управлять объявлениями и определениями глобальных переменных в коде C/C++, сгенерированном из кода MATLAB®. Используя классы памяти помогает вам соединить интерфейсом со сгенерированным кодом с внешним кодом.

Этот пример требует лицензии Embedded Coder®.

Запишите функциональный addglobals, который добавляет четыре глобальных переменные. Объявите глобальные переменные в функции.

function y = addglobals

% 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. Для вывода type'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 "rt_nonfinite.h"
    #include "addglobals.h"
    #include "addglobals_initialize.h"
    
    /* Named Constants */
    #define b_u                            (1.0)
    
    /* Function Definitions */
    
    /*
     * Arguments    : void
     * Return Type  : void
     */
    void addglobals_initialize(void)
    {
      rt_InitInfAndNaN(8U);
      u = b_u;
    }
    

Просмотрите определение и объявление для импортированного внешнего глобального 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;

Смотрите также

Похожие темы