В этом примере показано, как генератор кода устраняет устаревшие (то есть неиспользуемые) пути кода из сгенерированного кода. Эта оптимизация увеличивает скорость выполнения и сохраняет потребление ПЗУ и ОЗУ.
В rtwdemo_deadpathElim модели сигнал, выходящий из блока Суммы, делится на два отдельных кодовых пути. Верхний путь не является мертвым путем кода. Если пользователь отключает блок Assertion, нижний путь становится тупиковым путем кода.
model = 'rtwdemo_deadpathElim';
open_system(model);

Для блока утверждения откройте диалоговое окно параметров блока.
Установите флажок Включить утверждение. Для включения блока Assertion можно также использовать API командной строки.
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 с помощью API командной строки.
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.