Можно оптимизировать сгенерированный код путем выбора 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; }
Включите оптимизацию
Откройте диалоговое окно Configuration Parameters.
На панели Оптимизации выберите 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)