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

Глобальные переменные могут увеличить требования к памяти и уменьшить скорость выполнения. Чтобы уменьшать глобальный RAM для подсистемы одноразового использования, можно сгенерировать функциональный интерфейс, который передает данные через аргументы вместо глобальных переменных. Интерфейс Function параметра блока Subsystem (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 и установите параметр Function 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:

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

Затем, сгенерируйте ту же функцию с опцией Allow arguments, чтобы сравнить результаты.

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

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

  1. Откройте диалоговое окно Subsystem Block Parameter для RollAngleReference.

  2. Кликните по вкладке Code Generation. Установите параметр Function interface на Allow arguments.

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

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

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

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

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

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

Похожие темы