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

Localizable Класс храненияОткройте модель.
model='rtwdemo_localizable_csc'; open_system(model);
Чтобы соблюдать спецификацию, откройте редактор Сопоставления кода (Code Mappings). На вкладке Код C выберите Интерфейс кода > Сопоставления кодов отдельных элементов.
На вкладке 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 выберите параметр конфигурации модели Enable Local Block Outputs. По умолчанию этот параметр включен.
Можно указать то же самое Localizable класс хранения на двух сигналах, которые находятся в различных многоразовых подсистемах. Поэтому можно создать блок библиотеки из повторно используемой подсистемы с помощью Localizable спецификация класса хранения.
Генератор кода не создает локальную переменную для сигнала, который должен оставаться глобальным. Несколько случаев, в которых генератор кода не может локализовать сигнал:
Входные и выходные сигналы неиспользуемой подсистемы, даже если для параметра Function interface установлено значение Allow arguments (Optimized).
Сигнал удерживает состояние, потому что его приемные и приводные блоки выполняются с разной скоростью.
Localizable спецификация - на сигнале, пересекающем границу условно выполняемой подсистемы.