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