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

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

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

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

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

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

  • Уменьшает потребление RAM и ROM.

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

Модель в качестве примера

Рассмотрите модель 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. Откройте диалоговое окно Configuration Parameters.

  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)

Смотрите также

Похожие темы