Предположим, внешний код условно распределяет память для и инициализирует данные таблицы подстановки и набора точек останова на основе длины измерения, указанной как #define макро. В этом примере показано, как создать код, который импортирует эти внешние глобальные данные.
Сохранение определения данных набора точек останова T1Break и данные таблицы поиска T1Data в текущей папке в файле с именем ex_vec_symdim_src.c. Эти глобальные переменные имеют 9 или 11 элементов в зависимости от значения макроса bpLen.
#include "ex_vec_symdim_decs.h"
#if bpLen == 11
double T1Break[bpLen] = {
-5.0,
-4.0,
-3.0,
-2.0,
-1.0,
0.0,
1.0,
2.0,
3.0,
4.0,
5.0
} ;
double T1Data[bpLen] = {
-1.0,
-0.99,
-0.98,
-0.96,
-0.76,
0.0,
0.76,
0.96,
0.98,
0.99,
1.0
} ;
#endif
#if bpLen == 9
double T1Break[bpLen] = {
-4.0,
-3.0,
-2.0,
-1.0,
0.0,
1.0,
2.0,
3.0,
4.0
} ;
double T1Data[bpLen] = {
-0.99,
-0.98,
-0.96,
-0.76,
0.0,
0.76,
0.96,
0.98,
0.99
} ;
#endif
Сохранение объявлений переменных и определения макроса в текущей папке в файле ex_vec_symdim_decs.h.
#define bpLen 11 extern double T1Break[bpLen]; extern double T1Data[bpLen];
Открыть пример модели rtwdemo_configinterface.
open_system('rtwdemo_configinterface') set_param('rtwdemo_configinterface/Table1','DataSpecification','Table and breakpoints');

Откройте диалоговое окно Table1 блока. Блок относится к переменным, T1Data и T1Break, в рабочем пространстве модели. Эти переменные хранят данные таблицы подстановки и набора точек останова с 11 элементами.
В командной строке преобразуйте переменные в Simulink.Parameter объекты.
mws = get_param('rtwdemo_configinterface','modelworkspace'); T1Data = mws.getVariable('T1Data'); T1Break = mws.getVariable('T1Break'); T1Data = Simulink.Parameter(T1Data); T1Break = Simulink.Parameter(T1Break);
В командной строке создайте Simulink.Parameter объект для представления пользовательского макроса bpLen.
bpLen = Simulink.Parameter(11); bpLen.Min = 9; bpLen.Max = 11; bpLen.DataType = 'int32'; bpLen.CoderInfo.StorageClass = 'Custom'; bpLen.CoderInfo.CustomStorageClass = 'ImportedDefine'; bpLen.CoderInfo.CustomAttributes.HeaderFile = 'ex_vec_symdim_decs.h';
Использовать bpLen для задания размеров таблицы подстановки и данных набора точек останова. Настройте модель, чтобы включить символьные размеры, выбрав параметр конфигурации Разрешить спецификацию символьных размеров.
T1Data.Dimensions = '[1 bpLen]'; T1Break.Dimensions = '[1 bpLen]'; set_param('rtwdemo_configinterface','AllowSymbolicDim','on');
Задать параметры конфигурации > Создание кода > Пользовательский код > Дополнительные сведения о построении > Исходные файлы для ex_vec_symdim_src.c.
set_param('rtwdemo_configinterface','CustomSource','ex_vec_symdim_src.c')
Настройте объекты для импорта определений данных из внешнего кода.
mws.assignin('T1Data',T1Data); mws.assignin('T1Break',T1Break); cm = coder.mapping.utils.create('rtwdemo_configinterface'); setDataDefault(cm,'ModelParameters','StorageClass','Default'); setModelParameter(cm,'Table1','StorageClass','Model default'); setModelParameter(cm,'Table2','StorageClass','Model default'); setModelParameter(cm,'T1Data','StorageClass','ImportFromFile','HeaderFile','ex_vec_symdim_decs.h'); setModelParameter(cm,'T1Break','StorageClass','ImportFromFile','HeaderFile','ex_vec_symdim_decs.h');
Создайте код из модели.
Сгенерированный алгоритм кода находится в модели step функция в созданном файле rtwdemo_configinterface.c. Алгоритм проходит T1Break, T1Data, и bpLen в качестве значений аргументов функции, выполняющей поиск таблицы. В этом случае bpLen управляет верхней границей двоичного поиска, используемого функцией.
Дополнительные сведения о символьных измерениях см. в разделе Реализация вариантов измерений для размеров массива в сгенерированном коде.