Сгенерируйте эффективный код для сигналов шины

В модели вы используете сигналы шины, чтобы упаковать несколько сигналов вместе в одну сигнальную линию. Можно создавать виртуальные или невиртуальные сигналы шины. Представление в сгенерированном коде зависит от:

  • Для виртуальной шины сгенерированный код появляется так, как будто шины не существует.

  • Сгенерированный код для невиртуальной шины представляет данные шины со структурой. Когда вы хотите проследить соответствие между моделью и кодом, использование структуры в сгенерированном коде может быть полезным. Чтобы сгенерировать структуры, использующие невиртуальные сигналы шины, смотрите Организуйте данные в Структуры в Сгенерированном Коде.

Для получения общей информации о шинах смотрите и Типы составных сигналов.

Чтобы сгенерировать эффективный код из моделей, которые содержат сигналы шины, устраните ненужные копии данных, следуя лучшим практикам при построении модели.

Эффективность кода для сигналов шины

Когда вы используете автобусы в модели, для которой вы намерены сгенерировать код:

  • Установка параметров конфигурации диагностики шины может облегчить разработку модели.

  • Методы реализации шины и выбор невиртуальной или виртуальной шины могут повлиять на скорость, размер и четкость сгенерированного кода.

  • Некоторые полезные методы реализации шины не сразу очевидны.

Когда вы работаете с автобусами, эти инструкции помогают вам улучшить результаты. В руководящих принципах описываются методы:

  • Упростите размещение модели.

  • Повышение эффективности сгенерированного кода.

  • Задайте структуры данных для функциональных (подсистемных) интерфейсов.

  • Задайте структуры данных, которые соответствуют существующим структурам данных во внешнем коде С

Существуют некоторые компромиссы между скоростью, размером и ясностью. Например, код для невиртуальных шин легче считать, потому что шины появляются в коде как структуры, но код для виртуальных шин быстрее, потому что виртуальные шины не требуют копирования сигнальных данных. Примените некоторые инструкции, основанные на том, где вы находитесь в процессе разработки приложения.

Установка диагностики шины

Simulink® обеспечивает диагностику, которую можно использовать для оптимизации использования шины. Установите следующие значения на панели Configuration Parameters Diagnostics > Connectivity >.

Оптимизация виртуальных и невиртуальных шин

Виртуальные шины являются графическими удобствами, которые не влияют на сгенерированный код. В результате механизм генерации кода способен полностью оптимизировать сигналы в шине. Используйте виртуальные шины, а не невиртуальные шины, где это возможно. Можно преобразовать между виртуальной и невиртуальной шинами с помощью блоков Signal Conversion. В некоторых случаях Simulink автоматически преобразует виртуальную шину в невиртуальную при необходимости. Для примера диаграмма Stateflow преобразует вход виртуальную шину в невиртуальную.

Чтобы связать сигналы вызова функции, вы должны использовать виртуальную шину.

Вы должны использовать невиртуальные автобусы для:

  • Графические классы памяти Nonauto

  • Генерация определенной структуры из шины

  • Блоки Inport или Outport корневого уровня, когда шина имеет смешанные типы данных

Избегайте нелокальных вложенных шин в невиртуальных шинах

Автобусы могут содержать подчиненные автобусы. Чтобы сгенерировать эффективный код, установите классы памяти подчиненных шин на Auto. Установка класса памяти на Auto устраняет:

  • Выделение избыточной памяти для подчиненного сигнала шины и для родительского сигнала шины

  • Дополнительные операции копирования (копирование данных в подчиненную шину, а затем копирование из подчиненной шины в конечную шину)

Эта модель содержит невиртуальные сигналы шины. Подчиненные сигналы шины Sub_Bus_1 и Sub_Bus_2 использовать класс памяти Auto.

Алгоритм сгенерированного кода эффективно присваивает входные сигналы данные сигналам шины.

void ex_nonvirtual_buses_step(void)
{
  Nonvirtual_In_One.SimpleBus_1.A1 = A1;
  Nonvirtual_In_One.SimpleBus_1.A2 = A2;
  Nonvirtual_In_One.SimpleBus_2.A3 = A3;
  Nonvirtual_In_One.SimpleBus_2.A4 = A4;
  Nonvirtual_In_One.A5 = A5;
}

См. также

Похожие темы