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

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

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

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

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

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

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

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

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

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

The 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;
}

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

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

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

  2. Выберите Remove Disable Function и Remove Reset Function.

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

См. также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте