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
спецификация находится на сигнале, который пересекает контур условно выполняемой подсистемы.