Встроенные инвариантные сигналы

Сгенерированный код можно оптимизировать, выбрав Инлайн инвариантные сигналы на панели Оптимизация (Optimization). Сгенерированный код использует числовые значения инвариантных сигналов вместо их символических имен.

Инвариантный сигнал - это блочный выходной сигнал, который не изменяется во время моделирования Simulink ®. Например, сигналS3 - инвариантный сигнал. Инвариантный сигнал не совпадает с инвариантной константой. Две константы (1 и 2) и значение усиления 3 являются инвариантными константами. Чтобы встроить инвариантные константы, задайте для параметра Поведение по умолчанию значение Inlined.

Оптимизация сгенерированного кода с использованием встроенных инвариантных сигналов

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

InlineInvariantSignals оптимизация:

  • Сокращение потребления ПЗУ и ОЗУ.

  • Повышает скорость выполнения.

Пример модели

Рассмотрим модель rtwdemo_inline_invariant_signals.

model = 'rtwdemo_inline_invariant_signals';
open_system(model);

Создать код

Создайте временную папку (во временной папке системы) для процесса сборки и контроля.

currentDir = pwd;
[~,cgDir] = rtwdemodir();

Создайте модель с помощью Simulink Coder.

slbuild(model)
### Starting build procedure for: rtwdemo_inline_invariant_signals
### Successful completion of build procedure for: rtwdemo_inline_invariant_signals

Build Summary

Top model targets built:

Model                             Action                       Rebuild Reason                                    
=================================================================================================================
rtwdemo_inline_invariant_signals  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 7.2481s

Просмотр созданного кода без оптимизации. Эти строки кода находятся в rtwdemo_inline_invariant_signals.c.

cfile = fullfile(cgDir,'rtwdemo_inline_invariant_signals_grt_rtw',...
    'rtwdemo_inline_invariant_signals.c');
rtwdemodbtype(cfile,'/* Output and update for atomic system',...
    '/* Model output', 1, 0);
/* Output and update for atomic system: '<Root>/InlinedConstFcn' */
void rtwdemo_inline__InlinedConstFcn(int32_T rtu_In1,
  B_InlinedConstFcn_rtwdemo_inl_T *localB, const ConstB_InlinedConstFcn_rtwdem_T
  *localC)
{
  /* Product: '<S1>/Product' */
  localB->Product = rtu_In1 * localC->Sum_p;
}

Включить оптимизацию

  1. Откройте диалоговое окно «Параметры конфигурации».

  2. На панели Оптимизация (Optimization) выберите Встроенные инвариантные сигналы (Inline Invariant Signals).

Кроме того, для оптимизации можно использовать API командной строки:

set_param(model, 'InlineInvariantSignals', 'on');

Создание кода с оптимизацией

Созданный код использует числовые значения свернутых констант вместо создания дополнительной структуры (rtwdemo_inline_invariant_ConstB).

Создайте модель с помощью Simulink Coder.

slbuild(model)
### Starting build procedure for: rtwdemo_inline_invariant_signals
### Successful completion of build procedure for: rtwdemo_inline_invariant_signals

Build Summary

Top model targets built:

Model                             Action                       Rebuild Reason                   
================================================================================================
rtwdemo_inline_invariant_signals  Code generated and compiled  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 5.5562s

Просмотр созданного кода с оптимизацией. Эти строки кода находятся в rtwdemo_minmax.c.

rtwdemodbtype(cfile,...
    '/* Output and update for atomic system', '/* Model output', 1, 0);
/* Output and update for atomic system: '<Root>/InlinedConstFcn' */
void rtwdemo_inline__InlinedConstFcn(int32_T rtu_In1,
  B_InlinedConstFcn_rtwdemo_inl_T *localB)
{
  /* Product: '<S1>/Product' */
  localB->Product = rtu_In1 << 5;
}

Закройте отчет о модели и создании кода.

bdclose(model)
rtwdemoclean;
cd(currentDir)

См. также

Связанные темы