Если модель имеет оптимальные параметры для удаления копий данных, можно удалить дополнительные копии данных с помощью меток сигналов. Изучив сгенерированный код и отчет о показателях статического кода и определив области, в которых, по вашему мнению, возможно повторное использование буфера, можно добавить метки к сигнальным линиям. Если возможно, генератор кода переупорядочивает операции блока для реализации спецификации повторного использования.
Указание повторного использования буфера повышает скорость выполнения и может снизить потребление ОЗУ.
Модель rtwdemo_label_guided_reuse демонстрирует, как можно использовать метки сигналов для запроса повторного использования буфера для входных и выходных сигналов блоков. Для этой модели генератор кода может использовать одну и ту же переменную для атомной подсистемы и выходов блока усиления или насыщения. Сгенерированный код использует одну и ту же переменную для выходных сигналов блока «Насыщенность» и «Атомная подсистема», поскольку эти сигналы содержат одну и ту же метку, и выбран параметр «Использовать метки сигналов для направления повторного использования буфера».

Откройте модель.
model='rtwdemo_label_guided_reuse'; open_system(model);
В диалоговом окне «Параметры конфигурации» снимите флажок «Использовать метки сигналов для управления повторным использованием буфера».
Создайте модель. rtwdemo_label_guided_reuse_step функция содержит следующий код:
void rtwdemo_label_guided_reuse_step(void)
{
real_T rtb_Saturation[4];
real_T rtb_Bias[4];
int32_T i;
AtomicSubsystem(rtU.In1, rtb_Bias);
for (i = 0; i < 4; i++) {
if (rtb_Bias[i] > 10.0) {
rtb_Saturation[i] = 10.0;
} else if (rtb_Bias[i] < -10.0) {
rtb_Saturation[i] = -10.0;
} else {
rtb_Saturation[i] = rtb_Bias[i];
}
rtb_Bias[i] *= 3.0;
}
AtomicSubsystem1(rtb_Saturation, rtb_Bias, rtY.Out1);
}for цикл, блок усиления выполняется после блока насыщения. Сгенерированный код использует одну и ту же переменную для вывода блоков Atomic Subsystem и Gain. В результате созданный код содержит две локальные переменные. rtb_Saturation и rtb_Bias для удержания промежуточных результатов.В диалоговом окне Параметры конфигурации (Configuration Parameters) выберите параметр Использовать метки сигналов (Use Signal Labels to Guide Buffer Reuse) и создайте модель. rtwdemo_label_guided_reuse_step функция содержит следующий код:
void rtwdemo_label_guided_reuse_step(void)
{
real_T rtb_Gain1[4];
int32_T i;
AtomicSubsystem(rtU.In1, rtY.Out1);
for (i = 0; i < 4; i++) {
rtb_Gain1[i] = 3.0 * rtY.Out1[i];
if (rtY.Out1[i] > 10.0) {
rtY.Out1[i] = 10.0;
} else {
if (rtY.Out1[i] < -10.0) {
rtY.Out1[i] = -10.0;
}
}
}
AtomicSubsystem1(rtY.Out1, rtb_Gain1, rtY.Out1);
}Генератор кода изменил порядок выполнения блока таким образом, что в пределах for цикл, блок Насыщения выполняется после блока усиления. Созданный код содержит одну локальную переменную rtb_Gain1 для удержания промежуточных результатов.
В дополнение к запросу, какие буферы использовать повторно, другим возможным вариантом использования является запрос повторного использования буфера для блочных входных и выходных сигналов, которые являются сложными.
Вы также можете использовать то же самое Reusable настраиваемая спецификация класса хранения на различных сигнальных линиях, чтобы указать, какие буферы использовать повторно. По сравнению с использованием Reusable пользовательские классы хранения данных, использование сигнальных меток для определения повторного использования имеет следующие преимущества:
Метки сигнала не являются точками наблюдения в сгенерированном коде, поэтому их использование не блокирует другие оптимизации, такие как исключение мертвого кода и сворачивание выражения.
Генератор кода не заставляет сигнал с меткой быть глобальной переменной в сгенерированном коде. Сигнал может быть локальной или глобальной переменной.
Сигналы с метками могут повторно использовать буферы с сигналами, не имеющими меток, поэтому возможно повторное использование среди локальных и глобальных переменных.
Использование сигнальных меток является более консервативным методом определения повторного использования, чем использование Reusable пользовательские классы хранения. Генератор кода не реализует повторное использование на основе меток, когда он может реализовать повторное использование с помощью Reusable пользовательские классы хранения в следующих случаях:
Повторное использование, которое может предотвратить другие оптимизации в созданном коде.
Повторное использование на корневых портах ввода и экспорта.
Повторное использование через привязки модели или границы подсистемы.
В подсистеме повторно используется буфер на промежуточном сигнале и входном или выходном порте.
Использовать сигнальные метки для управления повторным использованием буфера