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