Этот пример показывает, как генератор кода удаляет недостижимый (мертвый код) экземпляры сброса, и отключите функции от сгенерированного кода для основанных на ERT систем, которые включают модель, ссылающуюся на иерархии. Оптимизация сгенерированного кода, чтобы удалить недостижимый код является требованием для критических по отношению к безопасности систем. Эта оптимизация также улучшает скорость выполнения и уменьшает потребление ROM.
Если модель содержит блоки с состояниями, сгенерированный код содержит сброс, и отключите функции. Если модель не является частью условно выполняемой системы, такой как активированная подсистема, генератор кода может удалить запрещать функцию, потому что сгенерированный код не вызывает его. Если модель не является частью условно выполняемой системы, которая может сбросить состояния, когда вход управления включает его, генератор кода может удалить функцию сброса, потому что сгенерированный код не вызывает его.
Модель, на которую ссылаются, rtwdemo_optionalDisableResetFunc_bot
, находится в rtwdemo_optionalDisableResetFunc_top
. Модель, на которую ссылаются, содержит два блока с состояниями, блок Delay и блок Discrete-Time Integrator.
Откройте модели. В Командном окне введите rtwdemo_optionalDisableResetFunc_bot
и rtwdemo_optionalDisableResetFunc_top
.
В вашей системе временная папка создайте временную папку для сборки и инспекционного процесса.
Создайте модель.
Откройте файлы rtwdemo_optionalDisableResetFunc_bot.c
и rtwdemo_optionalDisableResetFunc_top.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
, потому что модель не является частью условно выполняемой системы, которая может сбросить состояния, когда вход управления включает его.
Откройте диалоговое окно Model Configuration Parameters для rtwdemo_optionalDisableResetFunc_bot
.
Выберите Remove Disable Function и Remove Reset Function.
Откройте файл rtwdemo_optionalDisableResetFunc_bot.c
. Код не содержит функцию rtwdemo_optionalDisableResetFunc_bot_Reset
или функцию rtwdemo_optionalDisableResetFunc_bot_Disable
.
Удалите отключают функцию | Удалите функцию сброса