В этом примере показано, как генератор кода устраняет мертвые (то есть неиспользованные) пути кода из сгенерированного кода. Эта оптимизация увеличивает скорость выполнения и сохраняет потребление ПЗУ и ОЗУ.
В rtwdemo_deadpathElim модели сигнал, покидающий блок Sum, делится на два отдельных пути кода. Верхний путь не является путем мертвого кода. Если пользователь отключает блок Assertion, нижний путь становится путем мертвого кода.
model = 'rtwdemo_deadpathElim';
open_system(model);
Для блока Assertion откройте диалоговое окно параметров блоков.
Установите флажок Enable assertion (Включить значения). Кроме того, используйте API командной строки, чтобы включить блок Assertion.
set_param([model '/Assert1'], 'Enabled', 'on');
Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_deadpathElim ### Successful completion of build procedure for: rtwdemo_deadpathElim Build Summary Top model targets built: Model Action Rebuild Reason ===================================================================================================== rtwdemo_deadpathElim 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.6s
Поскольку блок Assertion включен, эти линии rtwdemo_deadpathElim.c
включить код для блоков Gain и Assertion.
cfile = fullfile(cgDir,'rtwdemo_deadpathElim_grt_rtw','rtwdemo_deadpathElim.c'); rtwdemodbtype(cfile,'/* Model step', '/* Model initialize function */', 0, 1);
void rtwdemo_deadpathElim_step(void) { /* Sum: '<Root>/Sum1' incorporates: * Constant: '<Root>/Constant1' * Inport: '<Root>/In1' */ rtwdemo_deadpathElim_Y.Out1 = rtwdemo_deadpathElim_U.In1 + 1.0; /* Assertion: '<Root>/Assert1' incorporates: * Gain: '<Root>/G1' */ utAssert(2.0 * rtwdemo_deadpathElim_Y.Out1 != 0.0); }
Отключите блок Assertion, чтобы сгенерировать путь мертвого кода. Генератор кода обнаруживает путь мертвого кода и устраняет его из сгенерированного кода.
Для блока Assertion откройте диалоговое окно Параметры Блоков.
Снимите флажок Enable assertion.
Кроме того, используйте API командной строки, чтобы отключить блок Assertion.
set_param([model '/Assert1'], 'Enabled', 'off');
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_deadpathElim ### Successful completion of build procedure for: rtwdemo_deadpathElim Build Summary Top model targets built: Model Action Rebuild Reason ==================================================================================== rtwdemo_deadpathElim 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.1542s
Поскольку блок Assertion отключен, эти линии rtwdemo_deadpathElim.c
не включать код для блоков Gain и Assertion.
rtwdemodbtype(cfile,'/* Model step', '/* Model initialize function */', 0, 1);
void rtwdemo_deadpathElim_step(void) { /* Outport: '<Root>/Out1' incorporates: * Constant: '<Root>/Constant1' * Inport: '<Root>/In1' * Sum: '<Root>/Sum1' */ rtwdemo_deadpathElim_Y.Out1 = rtwdemo_deadpathElim_U.In1 + 1.0; }
bdclose(model) rtwdemoclean; cd(currentDir)
Другой пример того, как генератор кода устраняет пути с мертвым кодом в сгенерированном коде, см. rtwdemo_deadpath.