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.
Сгенерируйте и просмотрите код. The 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;
}
}The 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];
}
}
}Обе функции содержат переменные для хранения промежуточных значений. The Debug_b функция содержит переменную Debug. The Latching функция содержит переменную Latch.
Измените класс памяти сигнала с Localizable на ExportToFile. В редакторе Отображения для каждого сигнала установите класс памяти равным ExportToFile.
Сгенерируйте и просмотрите код. The rtwdemo_localizable_csc.c файл содержит следующие два объявления глобальных переменных:
real_T Debug[6]; real_T Latch[6];
The 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];
}
}The 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.
Сохраните модель.
Сгенерируйте и проверьте код. The 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];
}
}The 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 спецификация класса памяти, выберите параметр конфигурации модели Enable Local Block Outputs. Этот параметр включен по умолчанию.
Можно задать то же Localizable класс памяти на двух сигналах, которые находятся в разных переиспользуемых подсистемах. Поэтому можно создать библиотечный блок из переиспользуемой подсистемы с Localizable спецификация класса памяти.
Генератор кода не создает локальную переменную для сигнала, который должен оставаться глобальным. Несколько случаев, когда генератор кода не может локализовать сигнал:
Входной и выходной сигналы неприменяемой подсистемы, даже когда параметр Function interface установлен в Allow arguments (Optimized).
Сигнал удерживает состояние, потому что его приемник и блоки привода выполняются с различными скоростями.
Localizable спецификация находится на сигнале, который пересекает контур условно выполняемой подсистемы.