Этот пример показывает, как генератор кода оптимизирует операции с фиксированной точкой путем замены дорогих операций деления на высокоэффективные операции продукта. Эта оптимизация улучшает скорость выполнения.
В rtwdemo_fixptdiv модели два сигнала с фиксированной точкой соединяются с блоком Divide. Параметр Number of inputs имеет значение /*
.
model='rtwdemo_fixptdiv'; load_system(model) set_param(model,'HideAutomaticNames','off','SimulationCommand','Update') open_system(model);
Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
set_param(model,'GenCodeOnly','on'); slbuild(model);
### Starting build procedure for: rtwdemo_fixptdiv ### Successful completion of code generation for: rtwdemo_fixptdiv Build Summary Top model targets built: Model Action Rebuild Reason ==================================================================================== rtwdemo_fixptdiv Code generated Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 6.5439s
Просмотрите сгенерированный код. Вот фрагмент rtwdemo_fixptdiv.c
.
cfile = fullfile(cgDir,'rtwdemo_fixptdiv_ert_rtw','rtwdemo_fixptdiv.c'); rtwdemodbtype(cfile,'/* Model step','/* Model initialize', 1, 0);
/* Model step function */ void rtwdemo_fixptdiv_step(void) { /* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' * Product: '<Root>/Divide' */ rtY.Out1 = (int16_T)(rtU.In1 >> 3); }
Сгенерированный код содержит высокоэффективную операцию правого сдвига вместо дорогостоящей операции деления. Сгенерированный код также содержит предварительно вычисленное значение для постоянного входа в блок Product.
Обратите внимание, что полученная операция также включает регулировку в масштабировании сигнала от 2 ^ -3 до 2 ^ -5.
Закройте модель и отчет о генерации кода.
bdclose(model) rtwdemoclean; cd(currentDir)