Используя Embedded Coder®, можно сгенерировать код из моделей Simulink®, содержащих один или несколько вариантов. Сгенерированный код содержит условные выражения препроцессора, которые управляют активацией каждого варианта.
Примечание
Поддержки Simulink с помощью мультиэкземпляра сослались на модели с вариантом Simulink Functions для генерации кода.
Для получения информации об использовании STF_make_rtw_hook
файл, чтобы настроить процесс сборки, смотрите, Настраивают Процесс сборки с Файлом STF_make_rtw_hook (Simulink Coder)
Simulink.Parameter
ОбъектыПеременные MATLAB® позволяют вам выражениям управления вариантом быстрого прототипирования, когда вы создаете свою модель и генерируете условные выражения препроцессора для генерации кода. Однако, если вы хотите задать другие атрибуты генерации кода (такие как тип данных), можно преобразовать переменные MATLAB в Simulink.Parameter
объекты.
Задайте модель, в которой вы хотите заменить контрольные переменные варианта MATLAB на Simulink.Parameter
объекты.
model = 'my_model_containing_variant_choices';
open_system(model);
Получите переменные, на которые ссылаются в различных выражениях управления.
vars = Simulink.VariantManager.findVariantControlVars(model)
vars = 4x1 struct array with fields: Name Value Exists Source SourceType
Создайте внешний заголовочный файл для определения различных значений управления так, чтобы определения переменной были импортированы, когда код запускается.
headerFileName = [model '_importedDefines.h']; headerPreamble = strrep(upper(headerFileName),'.','_'); fid = fopen(headerFileName,'w+'); fidErr = (fid == -1); if (fidErr) fprintf('There was an error creating header file %s:... \n', headerFileName); else fprintf('+++ Creating header file ''%s'' with variant control... variable definitions.\n\n', headerFileName); fprintf(fid, '#ifndef %s\n', headerPreamble); fprintf(fid, '#define %s\n', headerPreamble); end
Различные контрольные переменные, заданные как Simulink.Parameter
объекты могут иметь один из этих классов памяти.
Define
или ImportedDefine
с заголовком bfile заданный
CompilerFlag
SystemConstant (AUTOSAR)
Ваш собственный класс памяти, который задает данные как макрос
Цикл через все переменные MATLAB, чтобы преобразовать их в Simulink.Parameter
объекты.
count = 0; for countVars = 1:length(vars) var = vars(countVars).Name; val = vars(countVars).Value; if isa(val, 'Simulink.Parameter') % Do nothing continue; end count = count+1; % Create and configure Simulink.Parameter objects % corresponding to the control variable names. % Specify the storage class as Define (Custom). newVal = Simulink.Parameter(val); newVal.DataType = 'int16'; newVal.CoderInfo.StorageClass = 'Custom'; newVal.CoderInfo.CustomStorageClass = 'Define (Custom)'; newVal.CoderInfo.CustomAttributes.HeaderFile = headerFileName; Simulink.data.assigninGlobal(model, var, newVal); if ~fidErr fprintf(fid, '#endif\n'); fclose(fid); end end
Примечание
Заголовочный файл может быть пустым для Define
класс памяти.
Если вы представляете варианты в блоке Variant Subsystem или блоке Variant Model, код, сгенерированный для каждого варианта, заключен в условных выражениях препроцессора C #if
, #else
, #elif
, и #endif
.
Если вы представляете варианты с помощью блока Variant Source или блока Variant Sink, код, сгенерированный для каждого варианта, заключен в условных выражениях препроцессора C #if
и #endif
.
Поэтому активный вариант выбран во время компиляции, и условные выражения препроцессора определяют который разделы кода выполниться.
Примечание
У вас должна быть лицензия Embedded Coder®, чтобы сгенерировать код.
Во вкладке Modeling панели инструментов Simulink нажмите Model Settings.
Выберите панель Code Generation и установите System target file на ert.tlc
.
В панели Report выберите Create code generation report.
Примечание
В панели Code Placement, если Compact
опция выбрана от File packaging format выпадающий список, model_types.h
файл не сгенерирован и содержимое model_types.h
файл перемещен в model.h
файл.
Выберите панель Code Generation и очистите Ignore custom storage classes и Apply.
В вашей модели щелкните правой кнопкой по блоку, содержащему варианты (Variant Subsystem, Variant Source, Variant Sink или блок Variant Model), и выберите Block Parameters.
Убедитесь, что Expression
(опция по умолчанию) выбрана для параметра Variant control mode.
Из списка Variant activation time выберите code compile
.
Simulink анализирует все варианты во время схемы обновления или симуляции. Этот анализ обеспечивает раннюю валидацию готовности генерации кода ко всем вариантам.
Создайте модель.