В этом примере показано, как генератор кода оптимизирует сгенерированный код путем удаления кода, который не влияет на результаты вычислений. Эта оптимизация:
Увеличивает скорость выполнения.
Уменьшает потребление ПЗУ.
В rtwdemo_blockreduction модели блок значения Gain 1.0 находится между блоками Inport и Outport.
model = 'rtwdemo_blockreduction';
open_system(model);

Создайте временную папку для процесса сборки и проверки.
currentDir=pwd; [~,cgDir]=rtwdemodir();
Создайте модель.
set_param(model,'BlockReduction','off'); slbuild(model)
### Starting build procedure for: rtwdemo_blockreduction ### Successful completion of build procedure for: rtwdemo_blockreduction Build Summary Top model targets built: Model Action Rebuild Reason ======================================================================================================= rtwdemo_blockreduction 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 6.7807s
Вот код от rtwdemo_blockreduction.c.
cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c'); rtwdemodbtype(cfile, '/* Model step function */',... '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/Gain'
* Inport: '<Root>/In1'
*/
rtwdemo_blockreduction_Y.Out1 = 1.0 * rtwdemo_blockreduction_U.In1;
}
Откройте диалоговое окно «Параметры конфигурации».
Выберите «Сокращение блока». Эта оптимизация включена по умолчанию.
В качестве альтернативы используйте API командной строки, чтобы включить оптимизацию.
set_param(model,'BlockReduction','on');
slbuild(model)
### Starting build procedure for: rtwdemo_blockreduction ### Successful completion of build procedure for: rtwdemo_blockreduction Build Summary Top model targets built: Model Action Rebuild Reason ====================================================================================== rtwdemo_blockreduction 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 6.2203s
Вот оптимизированный код из rtwdemo_blockreduction.c.
cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c'); rtwdemodbtype(cfile, '/* Model step function */',... '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Inport: '<Root>/In1'
*/
rtwdemo_blockreduction_Y.Out1 = rtwdemo_blockreduction_U.In1;
}
Потому что умножение входного сигнала на значение 1.0 не влияет на вычислительные результаты, генератор кода исключает блок усиления из генерируемого кода. Закройте модель и выполните очистку.
bdclose(model) rtwdemoclean; cd(currentDir)