При использовании Embedded Coder® чтобы сгенерировать код для архитектуры встраиваемых систем, важно спроектировать свой Simulink® модели с генерацией кода с самого начала процесса проекта. Подумайте о соответствующих факторах проекта и таких проблемах, как:
Используйте Simulink для моделей проекта, которые представляют алгоритмы приложения и окружений выполнения, из которых вы намерены сгенерировать развертываемый код. В зависимости от вашего приложения, можно развернуть код в среде выполнения, которая состоит из комбинации:
Компоненты окружения выполнения | Выбор |
---|---|
Оборудование |
|
Ядра |
|
Операционная система |
|
Планирование |
|
Код алгоритма приложения |
|
Когда вы проектируете модели, чтобы сгенерировать код C or C++ для быстрого прототипирования или производственного развертывания, имейте в виду окружение выполнения. Сгенерируйте код, который удовлетворяет требования реализации и избегает возможного переделывания проекта. Как отражено в предыдущей таблице, окружение выполнения для кода, который вы генерируете, может варьироваться от относительно простой до сложной. Например, простой случай является кодом, который вы генерируете из одной, однозадачной модели, которая работает на одноядерном микропроцессоре. Комплексный случай является кодом, который генерируется из модели, разделенной для работы в качестве распределенной системы на многоядерном микропроцессоре и FPGA.
Частью окружения выполнения приложения является среда выполнения программного обеспечения, которая отвечает за планирование и выполнение сгенерированного кода. Это программное обеспечение может уже существовать, как в случае с операционной системой и ее планировщиком, или можно кодировать программное обеспечение вручную. Уровень сложности варьируется в зависимости от того, какой из следующих сценариев моделирования и генерации кода применяется:
Сгенерируйте код из одной верхней части, которая представляет алгоритмы, предназначенные для выполнения в среде выполнения.
Сгенерируйте код из модели, которая представляет часть общего алгоритма. Можно смешать сгенерированный код с кодом, написанным вручную, и кодом, сгенерированным из других источников или релизов MathWorks® товары.
Для одной верхней части среда выполнения программного обеспечения отвечает за выполнение сгенерированного кода так же, как Simulink имитирует модель. Функции в сгенерированном коде высоко скоординированы и оптимизированы, потому что Simulink знает о зависимостях. Среда взаимодействует с кодом, сгенерированным только для верхней модели. Код, сгенерированный для верхней модели, обрабатывает взаимодействие с кодом для ссылочных блоков Model.
Рассмотрим следующий пример, где одна верхняя часть сопоставлена с задачами, которые выполняются на одноядерном центральном процессоре.
Для этой системы вы сопоставляете частоту часов модели с задачами, которые запускаются на оборудовании. Можно выбрать для Simulink, чтобы неявно сопоставить скорости или можно явно сопоставить их в вашей модели. Можно смоделировать эффекты задержки, следующие из того, как вы сопоставляете скорости в модели с однозадачными или многозадачными окружениями выполнения. Simulink планирует задачи правильно на основе скоростей в модели и зависимостей данных между задачами. Генератор кода реализует те же зависимости в коде, который он генерирует. Среда выполнения программного обеспечения вызывает сгенерированные функции точки входа со скоростью, основанной на системных таймерах и прерываниях. Сгенерированный код выполняется тем же способом, которым Simulink моделирует модель, и содержит код, предназначенный для передачи данных между функциями, выполняемыми с различными скоростями.
Когда вы генерируете код из нескольких верхних моделей отдельно и смешиваете этот код с кодом, полученным другими способами, окружение выполнения приложения принимает на себя больше ответственности среды выполнения программного обеспечения. Для этого сценария моделирования вы генерируете код для автономных, атомарных переиспользуемых компонентов.
При этом сценарии Simulink не знает о зависимостях модели. Функции в коде, сгенерированные из различных моделей, минимально скоординированы и оптимизированы. Для примера модели могут совместно использовать сгенерированные служебные функции. Потенциальные оптимизации, которые пересекают контуры модели, невозможны. Вы должны спроектировать среду выполнения программного обеспечения с учетом зависимостей между модулями кода, включая порядок выполнения. Для приложения, которое требует параллельного выполнения через несколько ядер, необходимо учитывать эффекты задержки данных через ядра.
Генератор кода помогает вам решить проблемы среды выполнения программного обеспечения, такие как совместные использования глобальными данными и предотвращение конфликтов идентификаторов. Код, сгенерированный для каждой модели, обрабатывает интерфейсы для ссылочных блоков Model.
При сопоставлении архитектуры встраиваемой системы с окружением моделирования Simulink, подумайте о проекте модели.
Алгоритмы моделирования | Заданные начальное состояние и вход, набор задач или инструкций, которые эффективно дают результаты, которые вы хотите. |
Интерфейсы моделирования | Механизмы, которые позволяют компонентам алгоритма передавать и обмениваться информацией через контуры компонентов. |
Системы моделирования | Набор компонентов алгоритма, которые достигают более высокой, специфичной для области цели или результата. Компоненты часто совместно используют ресурсы. |
Моделирование во время выполнения Окружений | Среда, которая обрабатывает планирование ресурсов системного алгоритма и выполнение. |
Рассмотрим следующие вопросы, касающиеся архитектуры встраиваемых систем с соответствующими возможностями моделирования и ссылками на связанную информацию. Используйте информацию в качестве руководства для отображения деталей архитектуры с окружением моделирования Simulink. Разработка архитектуры модели с учетом конкретной встроенной системной архитектуры поможет избежать переделки и будущих затрат на преобразование и обслуживание.
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
Что такое системная область? | Необходимые условия продукта (основанные на областях компонентов) | |
Включает ли система физические области, такие как механические, электрические или гидравлические области? | Физические системы | |
Какие аспекты вашего алгоритма вы можете представлять с блоками, предоставленными продуктами MathWorks? Какие блоки вам нужно создать? | Использование, создание и индивидуальная настройка блоков | |
Включает ли архитектура компоненты конечного автомата? | Событийно-управляемая система | Моделируйте реактивные системы в Stateflow (Stateflow) |
Есть ли необходимость стандартизировать код, который производит генератор кода из нескольких моделей? | Пользовательские определения кода для данных и функций |
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
| Представление данных | |
Где и как данные втягиваются в систему и втягиваются в систему? | Вход | |
| Выход | |
| Функции и вызовы функций | |
Можете ли вы воспользоваться настройкой строений генерации кода по умолчанию для категорий данных и функций? | Данные и функциональные строения | |
Вам нужно экспортировать функции, которые вызываются логикой управления, которая находится вне модели? | Экспорт функции | |
Контролирует ли система сигналы или данные журнала (для примера, для калибровки)? | Интерфейсы C API и ASAP2 обмена данными | |
Вам нужно заменить код, сгенерированный для функций или операторов, например, чтобы оптимизировать код для конкретного оборудования? | Замена кода | |
Нужно ли контролировать размещение данных или функций в памяти? | Разделы памяти | Управление размещением данных и функций в памяти путем вставки прагм |
Существует ли требование в отношении разработки и будущих факторов? | Разработка и будущие факторы |
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
| Компонентизация | |
| Модели-ссылки | |
Вы моделируете архитектуру клиент-сервер? | Функциональные блоки Simulink и блоки вызывающего абонента | |
Доступен ли соответствующий устаревший или пользовательский код? | Интегрирование с внешним кодом | Интегрирование с внешним кодом |
Можно ли применить ссылку архитектуру или ссылку компоненты? | Шаблоны модели и проекта | |
Вам нужно экспортировать функции, которые вызываются логикой управления, которая находится вне модели? | Модели экспорт функций | Обзор моделей экспорта функций |
Есть ли необходимость упаковать исходный код для компонента как общую библиотеку объектов, чтобы упростить распределение или совместное использование? | Общие библиотеки объектов (библиотеки динамических ссылок) | Упаковать сгенерированный код как общие библиотеки |
Можете ли вы повторно использовать функции? | Повторное использование функции | |
| Разделяемые данные | |
Нужно ли контролировать размещение данных или функций в памяти? | Разделы памяти | Управление размещением данных и функций в памяти путем вставки прагм |
Требуется ли применение стандарта AUTOSAR? Если да, то какие аспекты архитектуры связаны с AUTOSAR? | АВТО-РСА | AUTOSAR Blockset |
Должна ли ваша система соответствовать другим стандартам или руководствам? | Стандарты и руководящие принципы | Поддержка стандартов и руководящих принципов |
Архитектура Факторов | Факторы о моделировании | Связанная информация |
---|---|---|
| Интерфейсы во время выполнения |
|
Разбита ли система на параллельные компоненты для максимизации параллелизма? Какие компоненты? | Параллелизм | |
| Тактовые и тактовые частоты | |
| Составление расписаний на основе времени | |
| Основанное на событиях планирование | |
Должна ли система обрабатывать события инициализации, сброса или завершения? | Инициализация, сброс, завершение | |
| Выполнение задачи | |
| Платформы обработки | Многоядерные процессорные целевые системы |
| Ядро, операционная система |
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. Новая модель, которая использует содержимое шаблона и настройки, появится в окне Редактор.
Для получения дополнительной информации, например, о создании и использовании шаблона в качестве исходного проекта, см. раздел «Создание шаблона из модели».