Оптимизируйте сгенерированный код Используя 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();

Создайте модель.

slbuild(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.531s

Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в 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' */
  }
}

Включите оптимизацию

  1. Откройте диалоговое окно Configuration Parameters.

  2. В Configuration Parameter диалоговое окно выбирает Use memset, чтобы инициализировать плавания, и удваивается до 0,0 параметров. В качестве альтернативы можно использовать API командной строки, чтобы включить оптимизацию:

set_param(model,'InitFltsAndDblsToZero','off');

% # Open the Configuration Parameters dialog box.

Сгенерируйте код с оптимизацией

Генератор кода использует memset функция, чтобы инициализировать Constant блокируйте значения.

Создайте модель.

slbuild(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.655s

Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в 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)

Смотрите также

Похожие темы