Подготовьте модель, содержащую варианты, для генерации кода

Использование Embedded Coder®, можно сгенерировать код из Simulink® модели, содержащие один или несколько вариантов выбора. Сгенерированный код содержит предварительные условия процессора, которые управляют активацией каждого варианта выбора.

Примечание

Simulink поддерживает использование моделей, на которые ссылаются мультиобразцы, с вариантом Simulink Functions для генерации кода.

Для получения информации об использовании STF_make_rtw_hook файл для настройки процесса сборки см. Настройка процесса сборки с помощью STF_make_rtw_hook файла (Simulink Coder)

Преобразуйте переменные управления вариантами в Simulink.Parameter Объекты

MATLAB® переменные позволяют вам быстро прототипировать выражения управления вариантом, когда вы строите модель, и генерировать предварительные условия для генерации кода. Однако, если вы хотите задать другие атрибуты генерации кода (такие как тип данных), можно преобразовать переменный MATLAB в Simulink.Parameter объекты.

  1. Задайте модель, в которой вы хотите заменить переменные управления вариантом MATLAB на Simulink.Parameter объекты.

    model = 'my_model_containing_variant_choices';
    open_system(model);
    
  2. Получите переменные, на которые ссылаются в выражениях управления вариантом.

    vars = Simulink.VariantManager.findVariantControlVars(model)
    vars = 
    
    4x1 struct array with fields:
    
        Name
        Value
        Exists
        Source
        SourceType
  3. Создайте внешний файл заголовка для определения значений параметров варианта, чтобы определения переменных импортировались при запуске кода.

    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)

    • Ваш собственный класс памяти, который определяет данные как макрос

  4. Цикл через все переменный 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 ®.

  1. На вкладке Modeling панели инструментов Simulink нажмите Model Settings.

  2. Выберите панель Code Generation и установите для System target file значение ert.tlc.

  3. На панели Report выберите Create code generation report.

    Примечание

    На панели Code Placement, если Compact опция выбрана из File packaging format раскрывающегося списка, model_types.h файл не генерируется и содержимое model_types.h перемещаются в model.h файл.

  4. Выберите панель Code Generation и очистите Ignore custom storage classes и Apply.

  5. В модели щелкните правой кнопкой мыши блок, содержащий варианты выбора (Variant Subsystem, Variant Source, Variant Sink или Variant Model блок) и выберите Block Parameters.

  6. Убедитесь, что Expression (опция по умолчанию) выбирается для Variant control mode параметра.

  7. Из списка Variant activation time выберите code compile.

    Simulink анализирует все варианты выбора во время схемы обновления или симуляции. Этот анализ обеспечивает раннюю валидацию готовности генерации кода для всех вариантов выбора.

  8. Создайте модель.

Похожие примеры

Подробнее о