memset
ФункцияВ этом примере показано, как оптимизировать сгенерированный код при помощи memset
функционируйте, чтобы очистить внутреннюю память. Когда вы выбираете Использование параметра конфигурации модели memset, чтобы инициализировать плавания, и удваивается до 0,0, memset
функция очищает внутреннюю память к целочисленной комбинации двоичных разрядов 0
(то есть, все биты выключены).
Если ваш компилятор и целевой центральный процессор оба представляют нуль с плавающей точкой целочисленной комбинацией двоичных разрядов 0
, полагайте, что установка этого параметра получает КПД ROM и выполнение.
ПРИМЕЧАНИЕ: значения командной строки являются реверсом значений настроек. 'on' в командной строке соответствует очистке установки. 'off'
в командной строке соответствует выбору установки.
Эта оптимизация:
Уменьшает потребление ROM.
Улучшает скорость выполнения.
Рассмотрите модель matlab:rtwdemo_memset.
model = 'rtwdemo_memset';
open_system(model);
Генератор кода использует цикл, чтобы инициализировать Constant
блокируйте значения.
Создайте временную папку (в вашей системе временная папка) для сборки и инспекционного процесса.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
rtwbuild(model)
### Starting build procedure for: rtwdemo_memset ### Successful completion of build procedure for: rtwdemo_memset Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== rtwdemo_memset 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 10.396s
Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в rtwdemo_memset.c
.
cfile = fullfile(cgDir,'rtwdemo_memset_grt_rtw','rtwdemo_memset.c'); rtwdemodbtype(cfile,'/* Model initialize function */',... '/* Model terminate function */',1,0);
/* Model initialize function */ void rtwdemo_memset_initialize(void) { /* Registration code */ /* initialize error status */ rtmSetErrorStatus(rtwdemo_memset_M, (NULL)); /* external outputs */ { int32_T i; for (i = 0; i < 50; i++) { rtwdemo_memset_Y.Out1[i] = 0.0; } } { int32_T i; /* ConstCode for Outport: '<Root>/Out1' */ for (i = 0; i < 50; i++) { rtwdemo_memset_Y.Out1[i] = 56.0; } /* End of ConstCode for Outport: '<Root>/Out1' */ } }
Откройте диалоговое окно Configuration Parameters.
В Configuration Parameter диалоговое окно выбирает Use memset, чтобы инициализировать плавания, и удваивается до 0,0 параметров. В качестве альтернативы можно использовать API командной строки, чтобы включить оптимизацию:
set_param(model,'InitFltsAndDblsToZero','off'); % # Open the Configuration Parameters dialog box.
Генератор кода использует memset
функция, чтобы инициализировать Constant
блокируйте значения.
Создайте модель.
rtwbuild(model)
### Starting build procedure for: rtwdemo_memset ### Successful completion of build procedure for: rtwdemo_memset Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================== rtwdemo_memset 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.946s
Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в rtwdemo_memset.c
.
rtwdemodbtype(cfile,'/* Model initialize function */',... '/* Model terminate function */',1,0);
/* Model initialize function */ void rtwdemo_memset_initialize(void) { /* Registration code */ /* initialize error status */ rtmSetErrorStatus(rtwdemo_memset_M, (NULL)); /* external outputs */ (void) memset(&rtwdemo_memset_Y.Out1[0], 0, 50U*sizeof(real_T)); { int32_T i; /* ConstCode for Outport: '<Root>/Out1' */ for (i = 0; i < 50; i++) { rtwdemo_memset_Y.Out1[i] = 56.0; } /* End of ConstCode for Outport: '<Root>/Out1' */ } }
Закройте модель и отчет генерации кода.
bdclose(model) rtwdemoclean; cd(currentDir)
Используйте memset, чтобы инициализировать плавания, и удваивается до 0,0