Оптимизируйте сгенерированный код Используя функцию 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' */
  }
}

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

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

  2. В 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)

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

Похожие темы