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

Можно оптимизировать сгенерированный код, выбрав Inline invariant signals на панели Optimization. Сгенерированный код использует числовые значения инвариантных сигналов вместо их символьных имен.

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

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

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

The 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. На панели Оптимизация выберите 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)

См. также

Похожие темы