Можно оптимизировать сгенерированный код путем выбора Inline invariant signals на панели Optimization. Сгенерированный код использует численные значения инвариантных сигналов вместо их символьных имен.
Инвариантный сигнал является выходным сигналом блока, который не изменяется во время симуляции Simulink®. Например, S3
сигнала является инвариантным сигналом. Инвариантный сигнал не является тем же самым как инвариантной константой. Эти две константы (1 и 2) и значение усиления 3 являются инвариантными константами. Чтобы встроить инвариантные константы, установите Default parameter behavior на Inlined
.
Этот пример показывает, как использовать встроенные инвариантные сигналы оптимизировать сгенерированный код. Эта оптимизация преобразовывает символьные имена инвариантных сигналов в постоянные значения.
Оптимизация InlineInvariantSignals
:
Уменьшает потребление RAM и ROM.
Улучшает скорость выполнения.
Модель в качестве примера
Рассмотрите модель matlab:rtwdemo_inline_invariant_signals.
model = 'rtwdemo_inline_invariant_signals';
open_system(model);
Сгенерируйте код
Создайте временную папку (в вашей системе временная папка) для сборки и инспекционного процесса.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель с помощью Simulink Coder.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_inline_invariant_signals ### Successful completion of build procedure for model: rtwdemo_inline_invariant_signals
Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в 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; }
Включите оптимизацию
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации выберите Inline Invariant Signals.
Также можно использовать API командной строки, чтобы включить оптимизацию:
set_param(model, 'InlineInvariantSignals', 'on');
Сгенерируйте код с оптимизацией
Сгенерированный код использует численные значения свернутых констант вместо того, чтобы создать дополнительную структуру (rtwdemo_inline_invariant_ConstB).
Создайте модель с помощью Simulink Coder.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_inline_invariant_signals ### Successful completion of build procedure for model: rtwdemo_inline_invariant_signals
Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в 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)