exponenta event banner

Удаление функции сброса и отключения из сгенерированного кода

В этом примере показано, как генератор кода удаляет недоступные (мертвый код) экземпляры функций сброса и отключения из сгенерированного кода для систем на основе ERT, которые включают модели, ссылающиеся на иерархии. Оптимизация созданного кода для удаления недостижимого кода является требованием для критически важных для безопасности систем. Эта оптимизация также повышает скорость выполнения и снижает потребление ПЗУ.

Если модель содержит блоки с состояниями, созданный код содержит функции сброса и отключения. Если модель не является частью условно выполняемой системы, такой как включенная подсистема, генератор кода может удалить функцию disable, поскольку сгенерированный код не вызывает ее. Если модель не является частью условно выполняемой системы, которая может сбрасывать состояния, когда управляющий вход активирует ее, генератор кода может удалить функцию сброса, поскольку сгенерированный код не вызывает ее.

Пример модели

Ссылочная модель, rtwdemo_optionalDisableResetFunc_bot, находится в rtwdemo_optionalDisableResetFunc_top. Ссылочная модель содержит два блока с состояниями, блок задержки и блок дискретного интегратора времени.

Создать код

  1. Откройте модели. В окне команд введите rtwdemo_optionalDisableResetFunc_bot и rtwdemo_optionalDisableResetFunc_top.

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

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

  4. Откройте окно rtwdemo_optionalDisableResetFunc_top.c и rtwdemo_optionalDisableResetFunc_bot.c файлы.

rtwdemo_optionalDisableResetFunc_bot.c содержит эти функции сброса и отключения.

/* System reset for referenced model: 'rtwdemo_optionalDisableResetFunc_bot' */
void rtwdemo_optionalDisableResetFunc_bot_Reset
  (DW_rtwdemo_optionalDisableResetFunc_bot_f_T *localDW)
{
  /* InitializeConditions for Delay: '<Root>/Delay' */
  localDW->Delay_DSTATE = 0.0;

  /* InitializeConditions for DiscreteIntegrator: '<Root>/Discrete-Time Integrator' */
  localDW->DiscreteTimeIntegrator_DSTATE = 3.0;
}

/* Disable for referenced model: 'rtwdemo_optionalDisableResetFunc_bot' */
void rtwdemo_optionalDisableResetFunc_bot_Disable(real_T *rty_Out1,
  DW_rtwdemo_optionalDisableResetFunc_bot_f_T *localDW)
{
  /* Disable for DiscreteIntegrator: '<Root>/Discrete-Time Integrator' */
  localDW->DiscreteTimeIntegrator_DSTATE = *rty_Out1;
}

rtwdemo_optionalDisableResetFunc_top_step функция не вызывает rtwdemo_optionalDisableResetFunc_bot_Disable потому что модель не является частью условно выполняемой системы. rtwdemo_optionalDisableResetFunc_top_step функция не вызывает rtwdemo_optionalDisableResetFunc_bot_Reset потому что модель не является частью условно выполняемой системы, которая может сбрасывать состояния, когда управляющий вход ее разрешает.

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

  1. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) для rtwdemo_optionalDisableResetFunc_bot.

  2. Выберите «Удалить функцию отключения» и «Удалить функцию сброса».

Откройте окно rtwdemo_optionalDisableResetFunc_bot.c файл. Код не содержит rtwdemo_optionalDisableResetFunc_bot_Reset функции или rtwdemo_optionalDisableResetFunc_bot_Disable функция.

См. также

|

Связанные темы