Localizable Класс памятиДля сигналов, если это возможно, генерируют переменные, которые локальны для функций, а не в глобальном устройстве хранения данных. Генерация локальных переменных препятствует тому, чтобы генератор кода реализовал оптимизацию, которая удаляет эти переменные из сгенерированного кода. Локальные переменные улучшают наблюдаемость, удобочитаемость, и полезны в отладке сгенерированного кода.
Минимизация использования глобальных переменных при помощи локальных переменных взаимодействует с управлением использованием стека. Например, сложите размер, может определить количество локальных и глобальных переменных, которые генератор кода может выделить в сгенерированном коде. Для получения дополнительной информации смотрите, Настраивают Выделение Стекового пространства.
Модель rtwdemo_localizable_csc содержит два сигнала, которые имеют Localizable класс памяти. В Latching подсистема, сигнал с меткой Latch имеет Localizable класс памяти. В Debug подсистема, сигнал с меткой Debug имеет Localizable класс памяти.

Localizable Класс памятиОткройте модель.
model='rtwdemo_localizable_csc'; open_system(model);
Чтобы наблюдать спецификацию, откройте редактор Отображений Кода. На вкладке C Code выберите Code Interface> Individual Element Code Mappings.
На вкладке Signals/States расширьте Signals. Класс памяти для сигналов Latch и Debug установлен в Localizable.
Сгенерируйте и просмотрите код. Debug_b функция содержит этот код:
static void Debug_b(const real_T rtu_In1[6], const real_T rtu_In2[6], real_T
rtd_A[6])
{
real_T Debug;
int32_T i;
for (i = 0; i < 6; i++) {
Debug = rtu_In1[i] * rtu_In2[i];
rtd_A[i] += Debug;
}
}Latching функция содержит этот код:
static void Latching(const real_T rtu_In1[36], real_T rty_Out1[6], real_T
rty_Out2[6], real_T rtd_A[6])
{
real_T Latch[6];
int32_T i;
int32_T i_0;
for (i = 0; i < 6; i++) {
Latch[i] = rtd_A[i];
rty_Out2[i] = -Latch[i];
}
for (i = 0; i < 6; i++) {
rty_Out1[i] = 0.0;
for (i_0 = 0; i_0 < 6; i_0++) {
rty_Out1[i] += rtu_In1[6 * i_0 + i] * Latch[i_0];
}
}
}Обе функции содержат переменные для содержания промежуточных значений. Debug_b функция содержит переменную Debug. Latching функция содержит переменную Latch.
Измените класс памяти сигнала от Localizable к ExportToFile. В редакторе Отображений Кода, для каждого сигнала, устанавливает класс памяти на ExportToFile.
Сгенерируйте и просмотрите код. rtwdemo_localizable_csc.c файл содержит эти два объявления глобальной переменной:
real_T Debug[6]; real_T Latch[6];
Debug_b функция содержит этот код:
static void Debug_b(const real_T rtu_In1[6], const real_T rtu_In2[6], real_T
rtd_A[6])
{
int32_T i;
for (i = 0; i < 6; i++) {
Debug[i] = rtu_In1[i] * rtu_In2[i];
rtd_A[i] += Debug[i];
}
}Latching функция содержит этот код:
static void Latching(const real_T rtu_In1[36], real_T rty_Out1[6], real_T
rty_Out2[6], real_T rtd_A[6])
{
int32_T i;
int32_T i_0;
for (i = 0; i < 6; i++) {
Latch[i] = rtd_A[i];
rty_Out2[i] = -Latch[i];
}
for (i = 0; i < 6; i++) {
rty_Out1[i] = 0.0;
for (i_0 = 0; i_0 < 6; i_0++) {
rty_Out1[i] += rtu_In1[6 * i_0 + i] * Latch[i_0];
}
}
}Удобочитаемость кода и наблюдаемость эквивалентны с Localizable спецификацией класса памяти кроме помеченных сигналов являются глобальные переменные.
Удалите Debug и Latch сигналы от отображений кода. В редакторе Отображений Кода выберите каждый сигнал и нажмите кнопку Remove Signal.
Сохраните модель.
Сгенерируйте и рассмотрите код. Debug_b функция содержит этот код:
static void Debug(const real_T rtu_In1[6], const real_T rtu_In2[6], real_T
rtd_A[6])
{
int32_T i;
for (i = 0; i < 6; i++) {
rtd_A[i] += rtu_In1[i] * rtu_In2[i];
}
}Latching функция содержит этот код:
static void Latching(const real_T rtu_In1[36], real_T rty_Out1[6], real_T
rty_Out2[6], real_T rtd_A[6])
{
int32_T i;
int32_T i_0;
for (i = 0; i < 6; i++) {
rty_Out2[i] = -rtd_A[i];
rty_Out1[i] = 0.0;
for (i_0 = 0; i_0 < 6; i_0++) {
rty_Out1[i] += rtu_In1[6 * i_0 + i] * rtd_A[i_0];
}
}
}Без Localizable или ExportToFile классы памяти, генератор кода удаляет Debug и Latch переменные. Без этих переменных, удобочитаемости и наблюдаемости уменьшений сгенерированного кода.
Для генератора кода, чтобы локализовать сигналы с Localizable спецификация класса памяти, избранный параметр конфигурации модели Включает Локальному Блоку Выходные параметры. Этот параметр включен по умолчанию.
Можно задать тот же Localizable класс памяти на двух сигналах, которые находятся в различных допускающих повторное использование подсистемах. Поэтому можно создать библиотечный блок из допускающей повторное использование подсистемы с Localizable спецификация класса памяти.
Генератор кода не создает локальную переменную для сигнала, который должен остаться глобальным. Несколько случаев, в которых генератор кода не может локализовать сигнал:
Сигналы ввода и вывода подсистемы одноразового использования, даже когда параметр Function interface устанавливается на Allow arguments (Optimized).
Сигнал содержит состояние, потому что его блоки приемника и диска выполняются на различных уровнях.
Localizable спецификация находится на сигнале, который пересекает контур условно выполняемой подсистемы.