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

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

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

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

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

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

КПД кода для сигналов шины

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

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

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

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

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

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

  • Увеличьте КПД сгенерированного кода.

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

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

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

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

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

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

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

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

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

  • Неавтоматические классы памяти

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

  • Inport корневого уровня или Выходной порт блокируются, когда шина смешала типы данных

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

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

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

Похожие темы