В этом примере показано, как генератор кода устраняет мертвый (то есть, неиспользованный) пути выполнения кода от сгенерированного кода. Эта оптимизация увеличивает скорость выполнения и сохраняет потребление RAM и ROM.
В модели rtwdemo_deadpathElim, сигнал, оставляя блок Sum делится на два отдельных пути выполнения кода. Главный путь не является путем к мертвому коду. Если пользователь отключает блок Assertion, нижний путь становится путем к мертвому коду.
model = 'rtwdemo_deadpathElim';
open_system(model);
Для блока Assertion откройте диалоговое окно параметров блоков.
Выберите вводящий блок Enable. В качестве альтернативы используйте 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
включайте код для блоков Усиления и Утверждения.
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 откройте диалоговое окно Block Parameters.
Отмените выбор Разрешать вводящего блока.
В качестве альтернативы используйте 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
не включайте код для блоков Усиления и Утверждения.
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.