Этот пример показывает, как генератор кода устраняет мертвый (то есть, неиспользованный) пути выполнения кода от сгенерированного кода. Эта оптимизация увеличивает скорость выполнения и сохраняет потребление 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();
Создайте модель.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_deadpathElim ### Successful completion of build procedure for model: rtwdemo_deadpathElim
Поскольку блок 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');
Создайте модель.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_deadpathElim ### Successful completion of build procedure for model: rtwdemo_deadpathElim
Поскольку блок 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.