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 model: rtwdemo_memset ### Successful completion of build procedure for model: rtwdemo_memset
Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в 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 диалоговое окно выбирает the Use memset, чтобы инициализировать плавания, и удваивается до 0,0 параметров. Также можно использовать API командной строки, чтобы включить оптимизацию:
set_param(model,'InitFltsAndDblsToZero','off'); % # Open the Configuration Parameters dialog box.
Генератор кода использует функцию memset
, чтобы инициализировать значения блока Constant
.
Создайте модель.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_memset ### Successful completion of build procedure for model: rtwdemo_memset
Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в 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