В этом примере показано, как задать вывод блока в качестве локальных переменных. Генератор кода может потенциально повторно использовать эти локальные переменные в сгенерированном коде. Объявление блочного выхода локальными переменными сохраняет потребление ПЗУ. Повторное использование локальных переменных экономит ОЗУ, уменьшает количество копий данных и увеличивает скорость выполнения.
Блоки Inport, Outport, Gain и Switch используются для создания следующей модели. В этом примере модель называется local_variable_ex.

Для G2откройте диалоговое окно «Параметры блока усиления». Введите значение, равное 2.
Для G1, введите значение 3.
Для блока переключения откройте диалоговое окно «Параметры блока». В поле «Критерии передачи первого входного параметра» выберите u2>=Threshold.
Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters). Выберите панель Решатель (Solver). Для параметра «Тип» выберите Fixed-step.
Снимите флажок Configuration Parameters > Signal storage reuse (Параметры конфигурации > Повторное использование хранилища сигналов).
Выберите панель Создание кода > Отчет и выберите Создать отчет о создании кода.
Выберите панель «Создание кода». Выберите Только генерировать код (Generate code only), а затем в окне модели нажмите клавиши Ctrl + B. По завершении создания кода появляется отчет о создании кода HTML.
В отчете о создании кода выберите local_variable_ex.c и просмотрите функцию шага модели. Выходные сигналы блока усиления являются глобальными переменными local_variable_ex_B.G2 и local_variable_ex_B.G1.
/* Model step function */
void local_variable_ex_step(void)
{
/* Switch: '<Root>/Switch' incorporates:
* Inport: '<Root>/In1'
*/
if (local_variable_ex_U.In1 >= 0.0) {
/* Gain: '<Root>/G2' */
local_variable_ex_B.G2 = 2.0 * local_variable_ex_U.In1;
/* Outport: '<Root>/Out1' */
local_variable_ex_Y.Out1 = local_variable_ex_B.G2;
} else {
/* Gain: '<Root>/G1' */
local_variable_ex_B.G1 = 3.0 * local_variable_ex_U.In1;
/* Outport: '<Root>/Out1' */
local_variable_ex_Y.Out1 = local_variable_ex_B.G1;
}
/* End of Switch: '<Root>/Switch' */Выберите параметр Configuration Parameters > Signal Storage Reuse. Повторное использование системы хранения сигналов позволяет использовать следующие параметры оптимизации:
Включить локальные блочные выходы
Повторное использование выходных данных локальных блоков
Исключение лишних локальных переменных (сворачивание выражений)
Снимите флажки «Повторно использовать выходные данные локальных блоков» и «Исключить лишние локальные переменные» (сворачивание выражений).
Создайте код и просмотрите функцию шага модели. В функции шага модели есть три локальные переменные, поскольку выбран параметр оптимизации «Включить выходные данные локального блока». Локальные переменные rtb_G2 и rtb_G1 удерживать выходы блоков усиления. Локальная переменная rtb_Switch содержит выходные данные блока Switch.
/* Model step function */
void local_variable_ex_step(void)
{
real_T rtb_Switch;
real_T rtb_G2;
real_T rtb_G1;
/* Switch: '<Root>/Switch' incorporates:
* Inport: '<Root>/In1'
*/
if (local_variable_ex_U.In1 >= 0.0) {
/* Gain: '<Root>/G2' */
rtb_G2 = 2.0 * local_variable_ex_U.In1;
rtb_Switch = rtb_G2;
} else {
/* Gain: '<Root>/G1' */
rtb_G1 = 3.0 * local_variable_ex_U.In1;
rtb_Switch = rtb_G1;
}
/* End of Switch: '<Root>/Switch' */
/* Outport: '<Root>/Out1' */
local_variable_ex_Y.Out1 = rtb_Switch;
Выберите параметр «Параметры конфигурации» > «Повторно использовать выходные данные локального блока».
Создать код. В local_variable_ex.c просмотрите функцию шага модели. Существует одна локальная переменная, rtb_G2что генератор кода использует три раза.
/* Model step function */
void local_variable_ex_step(void)
{
real_T rtb_G2;
/* Switch: '<Root>/Switch' incorporates:
* Inport: '<Root>/In1'
*/
if (local_variable_ex_U.In1 >= 0.0) {
/* Gain: '<Root>/G2' */
rtb_G2 = 2.0 * local_variable_ex_U.In1;
} else {
/* Gain: '<Root>/G1' */
rtb_G2 = 3.0 * local_variable_ex_U.In1;
}
/* End of Switch: '<Root>/Switch' */
/* Outport: '<Root>/Out1' */
local_variable_ex_Y.Out1 = rtb_G2;Дополнительная временная переменная rtb_Switch и соответствующая копия данных отсутствует в сгенерированном коде.
Включить локальные блочные выходы