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

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

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

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

  1. Откройте модель rtwdemo_roll в качестве примера.

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

  3. В диалоговом окне Block Parameters подтвердите, что флажок 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) опция, чтобы сравнить результаты.

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

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

  1. Откройте диалоговое окно Subsystem Block Parameter для 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).

Смотрите также

Похожие темы