Удалите код для блоков, которые не имеют никакого эффекта на результаты расчетов

Этот пример показывает, как генератор кода оптимизирует сгенерированный код путем удаления кода, который не имеет никакого эффекта на результаты расчетов. Эта оптимизация:

  • Скорость выполнения увеличений.

  • Уменьшает потребление ROM.

Пример

В модели rtwdemo_blockreduction, блок Gain значения 1.0 является промежуточными блоками Inport и Outport.

model = 'rtwdemo_blockreduction';
open_system(model);

Сгенерируйте код

Создайте временную папку для сборки и инспекционного процесса.

currentDir=pwd;
[~,cgDir]=rtwdemodir();

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

set_param(model,'BlockReduction','off');
rtwbuild(model)
### Starting build procedure for model: rtwdemo_blockreduction
### Successful completion of build procedure for model: rtwdemo_blockreduction

Вот код от rtwdemo_blockreduction.c.

cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c');
rtwdemodbtype(cfile, '/* Model step function */',...
    '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Gain: '<Root>/Gain'
   *  Inport: '<Root>/In1'
   */
  rtwdemo_blockreduction_Y.Out1 = 1.0 * rtwdemo_blockreduction_U.In1;
}

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

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

  2. Выберите сокращение Block. Эта оптимизация включена по умолчанию.

Поочередно, используйте API командной строки, чтобы включить оптимизацию.

set_param(model,'BlockReduction','on');

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

rtwbuild(model)
### Starting build procedure for model: rtwdemo_blockreduction
### Successful completion of build procedure for model: rtwdemo_blockreduction

Вот оптимизированный код от rtwdemo_blockreduction.c.

cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c');
rtwdemodbtype(cfile, '/* Model step function */',...
    '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Inport: '<Root>/In1'
   */
  rtwdemo_blockreduction_Y.Out1 = rtwdemo_blockreduction_U.In1;
}

Поскольку умножение входного сигнала значением 1.0 не влияет на результаты расчетов, генератор кода исключает блок Gain от сгенерированного кода. Закройте модель и вымойтесь.

bdclose(model)
rtwdemoclean;
cd(currentDir)

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

Похожие темы