exponenta event banner

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

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

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

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

Общие сведения о шинах см. в разделах и Типы составных сигналов.

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

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

При использовании шин в модели, для которой предполагается создать код:

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

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

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

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

  • Упрощение компоновки модели.

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

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

  • Определите структуры данных, соответствующие существующим структурам данных во внешнем коде C.

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

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

Simulink ® обеспечивает диагностику, которую можно использовать для оптимизации использования шины. На панели «Параметры конфигурации» > «Диагностика» > «Возможности подключения» задайте следующие значения.

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

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

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

Необходимо использовать невиртуальные шины для:

  • Неавтономные классы хранения

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

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

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

Автобусы могут содержать подчинённые автобусы. Для создания эффективного кода установите классы хранения подчиненных шин в 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;
}

См. также

Связанные темы