Уменьшите глобальные переменные в неотменяемых функциях подсистемы

Глобальные переменные могут увеличить требования к памяти и снизить скорость выполнения. Чтобы уменьшить глобальную ОЗУ для непереиспользуемой подсистемы, можно сгенерировать функциональный интерфейс, который пропускает данные через аргументы вместо глобальных переменных. Параметр Блока Subsystem Function interface предоставляет эту опцию. Чтобы сравнить выходы для Function interface опций, сначала сгенерируйте функцию для подсистемы с void-void интерфейс, а затем сгенерируйте функцию с аргументами.

Сгенерируйте void-void Функция

По умолчанию, когда вы конфигурируете блок Subsystem как неотключаемую функцию, он генерирует void-void интерфейс.

  1. Откройте пример модели rtwdemo_roll.

  2. Щелкните подсистему правой кнопкой мыши RollAngleReference. Из списка выберите Block Parameter (Subsystem).

  3. В диалоговом окне Параметров блоков подтвердите, что установлен флажок Treat as atomic unit.

  4. Щелкните вкладку Code Generation и установите параметр Code interface packaging равным Nonreusable function.

  5. Параметр Function interface уже установлен на void_void.

  6. Нажмите Apply и OK.

  7. Повторите шаги 2-6 для других подсистем HeadingMode и BasicRollMode.

  8. Сгенерируйте код и отчет по статическим метрикам кода для rtwdemo_roll. Эта модель сконфигурирована, чтобы сгенерировать отчет генерации кода и автоматически открыть отчет. Для получения дополнительной информации см. «Создание отчета по метрикам статического кода для модели Simulink».

В отчете генерации кода, в rtwdemo_roll.c, сгенерированный код для подсистемы RollAngleReference содержит void-void определение функции:

 static void RollAngleReference(void)
 {
  ... 
 }
В отчете по метрикам статического кода перейдите к Global Variables. С void_void опция, количество байтов для глобальных переменных 47.

Затем сгенерируйте ту же функцию с Allow arguments (Optimized) опция сравнения результатов.

Сгенерируйте функцию с аргументами

Чтобы уменьшить глобальную ОЗУ, улучшите использование ПЗУ и скорость выполнения, сгенерируйте функцию, которая позволяет аргументы:

  1. Откройте диалоговое окно Блока Subsystem Параметра для RollAngleReference.

  2. Перейдите на вкладку Code Generation. Установите параметр Function interface равным Allow arguments (Optimized).

  3. Нажмите Apply и OK.

  4. Повторите шаги 2 и 3 для других подсистем HeadingMode и BasicRollMode.

  5. Сгенерируйте код и отчет по статическим метрикам кода для rtwdemo_roll.

В отчете генерации кода, в rtwdemo_roll.c, сгенерированный код для подсистемы RollAngleReference теперь имеет аргументы:

static real32_T RollAngleReference(real32_T rtu_Phi,... 
                                   boolean_T rtu_AP_Eng,...
                                   real32_T rtu_Turn_Knob)
 {
 ... 
 }
В отчете по метрикам статического кода перейдите к Global Variables. С Allow arguments набор опций, общее количество байтов для глобальных переменных теперь 39 байты.

В некоторых случаях, при генерации оптимизированного кода, генератор кода может не сгенерировать функцию, которая имеет аргументы. Чтобы сгенерировать предсказуемый функциональный интерфейс, который имеет аргументы, установите Function interface равным Allow arguments (Match graphical interface).

См. также

Похожие темы