Используя Встроенный Coder®, можно сгенерировать код от моделей Simulink®, содержащих один или несколько различного выбора. Сгенерированный код содержит условные выражения препроцессора, которые управляют активацией каждого различного выбора.
Для получения информации об использовании файла 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
с заданным заголовочным файлом
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 custom 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 или Различный Блок модели, код, сгенерированный для каждого различного выбора, заключен в условных выражениях препроцессора C #if
, #else
, #elif
и #endif
.
Если вы представляете различный выбор с помощью Различного Исходного блока или блока Variant Sink, код, сгенерированный для каждого различного выбора, заключен в условных выражениях препроцессора C #if
и #endif
.
Поэтому активный вариант выбран во время компиляции, и условные выражения препроцессора определяют который разделы кода выполниться.
У вас должна быть Встроенная лицензия Coder®, чтобы сгенерировать код.
В редакторе Simulink выберите Simulation> Model Configuration Parameters.
Выберите панель Генерации кода и установите Системный конечный файл на ert.tlc
.
В панели Отчета выберите отчет генерации кода Create.
В панели Размещения Кода, если опция Compact
выбрана из Файла упаковочный формат выпадающий список, не сгенерирован файл model_types.h
, и содержимое файла model_types.h
перемещено в model.h
hfile .
Выберите панель Генерации кода, и ясный Игнорируют пользовательские классы памяти и Применяются.
В вашей модели щелкните правой кнопкой по блоку, содержащему различный выбор (Различная Подсистема, Различный Источник, Различный Приемник или Различная Модель), и выберите Block Parameters.
Гарантируйте, что Expression
(опция по умолчанию) выбран для Различного параметра режима управления.
Выберите опцию, Анализируют весь выбор во время схемы обновления и генерируют условные выражения препроцессора.
Симулинк анализирует весь различный выбор во время схемы обновления или моделирование. Этот анализ обеспечивает раннюю валидацию готовности генерации кода ко всему различному выбору.
Создайте модель.