При использовании Simulink® Coder™ сгенерировать код для быстрого прототипирования, важно проектировать ваши модели Simulink с учетом генерации кода с самого начала процесса проекта.
Используйте Simulink для моделей проекта, которые представляют алгоритмы приложения и окружений выполнения, из которых вы намерены сгенерировать развертываемый код. В зависимости от вашего приложения, можно развернуть код в среде выполнения, которая состоит из комбинации:
Компоненты окружения выполнения | Выбор |
---|---|
Оборудование |
|
Ядра |
|
Операционная система |
|
Планирование |
|
Код алгоритма приложения |
|
Когда вы проектируете модели, чтобы сгенерировать код C or C++ для быстрого прототипирования или производственного развертывания, имейте в виду окружение выполнения. Сгенерируйте код, который удовлетворяет требования реализации и избегает возможного переделывания проекта. Как отражено в предыдущей таблице, окружение выполнения для кода, который вы генерируете, может варьироваться от относительно простой до сложной. Например, простой случай является кодом, который вы генерируете из одной, однозадачной модели, которая работает на одноядерном микропроцессоре. Комплексный случай является кодом, который генерируется из модели, разделенной для работы в качестве распределенной системы на многоядерном микропроцессоре и FPGA.
Частью окружения выполнения приложения является среда выполнения программного обеспечения, которая отвечает за планирование и выполнение сгенерированного кода. Это программное обеспечение может уже существовать, как в случае с операционной системой и ее планировщиком, или можно кодировать программное обеспечение вручную. Уровень сложности варьируется в зависимости от того, какой из следующих сценариев моделирования и генерации кода применяется:
Сгенерируйте код из одной верхней части, которая представляет алгоритмы, предназначенные для выполнения в среде выполнения.
Сгенерируйте код из модели, которая представляет часть общего алгоритма. Можно смешать сгенерированный код с кодом, написанным вручную, и кодом, сгенерированным из других источников или релизов MathWorks® товары.
Для одной верхней части среда выполнения программного обеспечения отвечает за выполнение сгенерированного кода так же, как Simulink имитирует модель. Функции в сгенерированном коде высоко скоординированы и оптимизированы, потому что Simulink знает о зависимостях. Среда взаимодействует с кодом, сгенерированным только для верхней модели. Код, сгенерированный для верхней модели, обрабатывает взаимодействие с кодом для ссылочных блоков Model.
Рассмотрим следующий пример, где одна верхняя часть сопоставлена с задачами, которые выполняются на одноядерном центральном процессоре.
Для этой системы вы сопоставляете частоту часов модели с задачами, которые запускаются на оборудовании. Можно выбрать для Simulink, чтобы неявно сопоставить скорости или можно явно сопоставить их в вашей модели. Можно смоделировать эффекты задержки, следующие из того, как вы сопоставляете скорости в модели с однозадачными или многозадачными окружениями выполнения. Simulink планирует задачи правильно на основе скоростей в модели и зависимостей данных между задачами. Генератор кода реализует те же зависимости в коде, который он генерирует. Среда выполнения программного обеспечения вызывает сгенерированные функции точки входа со скоростью, основанной на системных таймерах и прерываниях. Сгенерированный код выполняется тем же способом, которым Simulink моделирует модель, и содержит код, предназначенный для передачи данных между функциями, выполняемыми с различными скоростями.
Когда вы генерируете код из нескольких верхних моделей отдельно и смешиваете этот код с кодом, полученным другими способами, окружение выполнения приложения принимает на себя больше ответственности среды выполнения программного обеспечения. Для этого сценария моделирования вы генерируете код для автономных, атомарных переиспользуемых компонентов.
При этом сценарии Simulink не знает о зависимостях модели. Функции в коде, сгенерированные из различных моделей, минимально скоординированы и оптимизированы. Для примера модели могут совместно использовать сгенерированные служебные функции. Потенциальные оптимизации, которые пересекают контуры модели, невозможны. Вы должны спроектировать среду выполнения программного обеспечения с учетом зависимостей между модулями кода, включая порядок выполнения. Для приложения, которое требует параллельного выполнения через несколько ядер, необходимо учитывать эффекты задержки данных через ядра.
Генератор кода помогает вам решить проблемы среды выполнения программного обеспечения, такие как совместные использования глобальными данными и предотвращение конфликтов идентификаторов. Код, сгенерированный для каждой модели, обрабатывает интерфейсы для ссылочных блоков Model.
При разработке моделей для быстрого развертывания прототипов, подумайте об этих проектах.
Алгоритмы моделирования | Учитывая начальное состояние и вход, набор задач или инструкций, которые эффективно дают правильный результат, который вы хотите. |
Интерфейсы моделирования | Механизмы, которые позволяют компонентам алгоритма передавать и обмениваться информацией через контуры компонентов. |
Системы моделирования | Набор компонентов алгоритма, которые достигают более высокой, специфичной для области цели или результата. Компоненты часто совместно используют ресурсы. |
Моделирование во время выполнения Окружений | Среда, которая обрабатывает планирование ресурсов системного алгоритма и выполнение. |
Рассмотрим следующие вопросы, касающиеся возможностей моделирования. Используйте информацию, перечисленную с вопросами, в качестве руководства при моделях проекта. Разработка модели с учетом конкретного окружения выполнения во время выполнения может помочь вам избежать переделки и будущих затрат на преобразование и обслуживание.
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
Что такое системная область? | Необходимые условия продукта (основанные на областях компонентов) | |
Включает ли система физические области, такие как механические, электрические или гидравлические области? | Физические системы | |
Какие аспекты вашего алгоритма вы можете представлять с блоками, предоставленными продуктами MathWorks? Какие блоки вам нужно создать? | Использование, создание и индивидуальная настройка блоков | |
Включает ли архитектура компоненты конечного автомата? | Событийно-управляемая система | Моделируйте реактивные системы в Stateflow (Stateflow) |
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
| Представление данных | |
Где и как данные втягиваются в систему и втягиваются в систему? | Вход | |
| Выход | |
| Функции и вызовы функций | Сконфигурируйте генерацию кода C для функций точки входа модели |
Вам нужно экспортировать функции, которые вызываются логикой управления, которая находится вне модели? | Экспорт функции | |
Контролирует ли система сигналы или данные журнала (для примера, для калибровки)? | Интерфейсы C API и ASAP2 обмена данными | |
Вам нужно заменить код, сгенерированный для функций или операторов, например, чтобы оптимизировать код для конкретного оборудования? | Замена кода |
|
Существует ли требование в отношении разработки и будущих факторов? | Разработка и будущие факторы |
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
| Компонентизация | |
| Модели-ссылки | |
Вы моделируете архитектуру клиент-сервер? | Функциональные блоки Simulink и блоки вызывающего абонента | |
Доступен ли соответствующий устаревший или пользовательский код? | Интегрирование с внешним кодом | Что такое интегрирование с внешним кодом? (Embedded Coder) |
Можно ли применить ссылку архитектуру или ссылку компоненты? | Шаблоны модели и проекта | |
Можете ли вы повторно использовать функции? | Повторное использование функции | |
| Разделяемые данные |
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
| Интерфейсы во время выполнения |
|
Разбита ли система на параллельные компоненты для максимизации параллелизма? Какие компоненты? | Параллелизм | |
| Тактовые и тактовые частоты | |
| Составление расписаний на основе времени | |
| Основанное на событиях планирование | |
Должна ли система обрабатывать события инициализации, сброса или завершения? | Инициализация, сброс, завершение | |
| Выполнение задачи | |
| Платформы обработки | Многоядерные процессорные целевые системы |
Embedded Coder® предоставляет набор встроенных шаблонов для использования в качестве начальной точки для создания моделей для типичных проектов приложений. Используйте шаблоны для создания моделей, которые предварительно сконфигурированы для генерации кода для встраиваемых системных приложений.
Шаблон | Описание |
---|---|
Система генерации кода | Базовая модель, состоящая из блока Inport и блока Output. |
Экспортированные функции | Модель для генерации кода из подсистем вызова функций. Можно экспортировать каждую подсистему вызова функций отдельно, щелкнув правой кнопкой мыши подсистему, выбрав C/C++ Code > Export Functions и выбрав Build. |
Fixed-step, multirate | Модель с фиксированным шагом, которая использует несколько скоростей и состоит из блоков Inport, блока Outport и блока Sum. Модель сконфигурирована, чтобы использовать дискретный решатель с фиксированным шагом и использовать две скорости с параметром конфигурации модели, Periodic sample time constraint установлено на Unconstrained и Treat each discrete rate as a separate task параметра выбран. Simulink вставляет блок Rate Transition, чтобы обработать две частоты дискретизации. |
Фиксированная, одинарная скорость | Модель с фиксированным шагом, которая использует одну скорость и состоит из блоков Inport, блока Outport и блока Sum. Модель сконфигурирована, чтобы использовать дискретный решатель с фиксированным шагом. |
Чтобы создать модель из шаблона:
На MATLAB® home tab, нажмите Simulink.
На начальной странице Simulink разверните Embedded Coder.
Наведите указатель мыши на шаблон и щелкните Create Model. Новая модель, которая использует содержимое шаблона и настройки, появится в окне Редактор.
Для получения дополнительной информации, например, о создании и использовании шаблона в качестве исходного проекта, см. раздел «Создание шаблона из модели».