exponenta event banner

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

Сгенерированный код можно оптимизировать, выбрав Инлайн инвариантные сигналы на панели Оптимизация (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)

См. также

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