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