Модели проекта для сгенерированного развертывания встраиваемого кода

При использовании Embedded Coder® чтобы сгенерировать код для архитектуры встраиваемых систем, важно спроектировать свой Simulink® модели с генерацией кода с самого начала процесса проекта. Подумайте о соответствующих факторах проекта и таких проблемах, как:

Алгоритмы приложения и окружений выполнения

Используйте Simulink для моделей проекта, которые представляют алгоритмы приложения и окружений выполнения, из которых вы намерены сгенерировать развертываемый код. В зависимости от вашего приложения, можно развернуть код в среде выполнения, которая состоит из комбинации:

Компоненты окружения выполненияВыбор
Оборудование
  • Компьютер разработчика

  • Плата быстрого прототипирования

  • Микропроцессор

  • Микроконтроллер

  • FPGA

  • ASIC

Ядра
  • Одинок

  • Несколько

Операционная система
  • Общее назначение

  • В реальном времени

  • Нет (голый металл)

Планирование
  • Однозадачность

  • Многозадачность

  • Прерывание управляемое

  • Параллелизм

  • Предоставляется операционной системой

  • Сгенерирован из модели

Код алгоритма приложения
  • Сгенерирован из модели

  • Внешний код

Когда вы проектируете модели, чтобы сгенерировать код C or C++ для быстрого прототипирования или производственного развертывания, имейте в виду окружение выполнения. Сгенерируйте код, который удовлетворяет требования реализации и избегает возможного переделывания проекта. Как отражено в предыдущей таблице, окружение выполнения для кода, который вы генерируете, может варьироваться от относительно простой до сложной. Например, простой случай является кодом, который вы генерируете из одной, однозадачной модели, которая работает на одноядерном микропроцессоре. Комплексный случай является кодом, который генерируется из модели, разделенной для работы в качестве распределенной системы на многоядерном микропроцессоре и FPGA.

Среда выполнения программного обеспечения для сгенерированного кода

Частью окружения выполнения приложения является среда выполнения программного обеспечения, которая отвечает за планирование и выполнение сгенерированного кода. Это программное обеспечение может уже существовать, как в случае с операционной системой и ее планировщиком, или можно кодировать программное обеспечение вручную. Уровень сложности варьируется в зависимости от того, какой из следующих сценариев моделирования и генерации кода применяется:

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

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

Единая верхняя часть

Для одной верхней части среда выполнения программного обеспечения отвечает за выполнение сгенерированного кода так же, как Simulink имитирует модель. Функции в сгенерированном коде высоко скоординированы и оптимизированы, потому что Simulink знает о зависимостях. Среда взаимодействует с кодом, сгенерированным только для верхней модели. Код, сгенерированный для верхней модели, обрабатывает взаимодействие с кодом для ссылочных блоков Model.

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

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

Несколько моделей верхнего уровня

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

При этом сценарии Simulink не знает о зависимостях модели. Функции в коде, сгенерированные из различных моделей, минимально скоординированы и оптимизированы. Для примера модели могут совместно использовать сгенерированные служебные функции. Потенциальные оптимизации, которые пересекают контуры модели, невозможны. Вы должны спроектировать среду выполнения программного обеспечения с учетом зависимостей между модулями кода, включая порядок выполнения. Для приложения, которое требует параллельного выполнения через несколько ядер, необходимо учитывать эффекты задержки данных через ядра.

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

Сопоставьте архитектуру встраиваемых систем с окружением моделирования Simulink

При сопоставлении архитектуры встраиваемой системы с окружением моделирования Simulink, подумайте о проекте модели.

Алгоритмы моделированияЗаданные начальное состояние и вход, набор задач или инструкций, которые эффективно дают результаты, которые вы хотите.
Интерфейсы моделированияМеханизмы, которые позволяют компонентам алгоритма передавать и обмениваться информацией через контуры компонентов.
Системы моделированияНабор компонентов алгоритма, которые достигают более высокой, специфичной для области цели или результата. Компоненты часто совместно используют ресурсы.
Моделирование во время выполнения ОкруженийСреда, которая обрабатывает планирование ресурсов системного алгоритма и выполнение.

Рассмотрим следующие вопросы, касающиеся архитектуры встраиваемых систем с соответствующими возможностями моделирования и ссылками на связанную информацию. Используйте информацию в качестве руководства для отображения деталей архитектуры с окружением моделирования Simulink. Разработка архитектуры модели с учетом конкретной встроенной системной архитектуры поможет избежать переделки и будущих затрат на преобразование и обслуживание.

Алгоритмы моделирования

Архитектура ФакторовФакторы о моделированииСвязанная информация
Что такое системная область?Необходимые условия продукта (основанные на областях компонентов)
Включает ли система физические области, такие как механические, электрические или гидравлические области?Физические системы
Какие аспекты вашего алгоритма вы можете представлять с блоками, предоставленными продуктами MathWorks? Какие блоки вам нужно создать?Использование, создание и индивидуальная настройка блоков
Включает ли архитектура компоненты конечного автомата?Событийно-управляемая система

Моделируйте реактивные системы в Stateflow (Stateflow)

Есть ли необходимость стандартизировать код, который производит генератор кода из нескольких моделей? Пользовательские определения кода для данных и функций

Интерфейсы моделирования

Архитектура ФакторовФакторы о моделированииСвязанная информация
  • Какие данные вы должны представлять в сгенерированном коде?

  • Как вам нужно представлять вход и выход - тип данных, размерность, сложность?

  • Используют ли алгоритмы арифметику с плавающей точкой или с фиксированной точкой?

  • Как изменятся данные?

Представление данных
Где и как данные втягиваются в систему и втягиваются в систему?Вход

Сравнение методов загрузки

  • Где и как данные выталкиваются в системе и из системы?

  • Какие внешние триггеры требуются?

Выход
  • Какие функции необходимо задать для каждого компонента?

  • Какой прототип для каждой функции точки входа?

Функции и вызовы функций
Можете ли вы воспользоваться настройкой строений генерации кода по умолчанию для категорий данных и функций?Данные и функциональные строения
Вам нужно экспортировать функции, которые вызываются логикой управления, которая находится вне модели?Экспорт функции
Контролирует ли система сигналы или данные журнала (для примера, для калибровки)?Интерфейсы C API и ASAP2 обмена данными
Вам нужно заменить код, сгенерированный для функций или операторов, например, чтобы оптимизировать код для конкретного оборудования?Замена кода
Нужно ли контролировать размещение данных или функций в памяти?Разделы памяти

Управление размещением данных и функций в памяти путем вставки прагм

Существует ли требование в отношении разработки и будущих факторов?Разработка и будущие факторы

Задайте интерфейсы компонентов модели

Системы моделирования

Архитектура ФакторовФакторы о моделированииСвязанная информация
  • Каковы возможности системы? Контроллер? Внешнее окружение или объект? Тестовая обвязка?

  • Как система разделяется на компоненты алгоритма (фрагменты логики)?

  • Какие компоненты можно представлять в Simulink?

  • Можете ли вы проектировать компоненты для повторного использования? Какова мотивация для повторного использования (для примера, деление труда или plug-n-play)?

Компонентизация
  • Требуют ли аспекты системы модульного тестирования?

  • Команда людей сотрудничает с проектом?

  • Вам нужно защищать интеллектуальное свойство?

Модели-ссылки
Вы моделируете архитектуру клиент-сервер?Функциональные блоки Simulink и блоки вызывающего абонента
Доступен ли соответствующий устаревший или пользовательский код?Интегрирование с внешним кодомИнтегрирование с внешним кодом
Можно ли применить ссылку архитектуру или ссылку компоненты?Шаблоны модели и проекта
Вам нужно экспортировать функции, которые вызываются логикой управления, которая находится вне модели?Модели экспорт функцийОбзор моделей экспорта функций
Есть ли необходимость упаковать исходный код для компонента как общую библиотеку объектов, чтобы упростить распределение или совместное использование?Общие библиотеки объектов (библиотеки динамических ссылок)Упаковать сгенерированный код как общие библиотеки
Можете ли вы повторно использовать функции?Повторное использование функции
  • Нужно ли компонентам совместно использовать доступ к глобальным данным?

  • В системе происходят ли изменения состояния? В каждом случае как сообщается результат?

  • Существуют ли проблемы с идентификатором (именованием)?

Разделяемые данные
Нужно ли контролировать размещение данных или функций в памяти?Разделы памяти

Управление размещением данных и функций в памяти путем вставки прагм

Требуется ли применение стандарта AUTOSAR? Если да, то какие аспекты архитектуры связаны с AUTOSAR?АВТО-РСАAUTOSAR Blockset
Должна ли ваша система соответствовать другим стандартам или руководствам?Стандарты и руководящие принципыПоддержка стандартов и руководящих принципов

Моделирование во время выполнения Окружений

Архитектура ФакторовФакторы о моделированииСвязанная информация
  • Какой уровень контроля за интерфейсами во время выполнения требуется вашему приложению?

  • Какую часть вашей системы вы можете представлять в модели?

Интерфейсы во время выполнения
Разбита ли система на параллельные компоненты для максимизации параллелизма? Какие компоненты?Параллелизм

Многоядерные процессорные целевые системы

  • Управляются ли компоненты внешним синхроимпульсом?

  • Какие тактовые частоты используют системные компоненты?

  • Используют ли компоненты одну или несколько скоростей?

Тактовые и тактовые частоты

Задайте интерфейсы компонентов модели

  • Являются ли компоненты в системе управляемыми синхроимпульсами?

  • Какие тактовые частоты используют системные компоненты?

  • Используют ли компоненты одну или несколько скоростей?

  • Каковы приоритеты системных задач и функций?

Составление расписаний на основе времени
  • Управляются ли компоненты в системе событиями (прерываниями)?

  • Каковы приоритеты системных задач и функций?

Основанное на событиях планирование
Должна ли система обрабатывать события инициализации, сброса или завершения?Инициализация, сброс, завершение
  • Является ли система однозадачной или многозадачной системой?

  • Требуются ли компоненты для выполнения в режиме реального времени?

  • Каковы зависимости порядка выполнения (секвенирование) между компонентами?

  • Каковы временные ограничения для выполнения задачи и функции?

Выполнение задачи
  • Если вы знаете обрабатывающую платформу, что это такое?

  • Будет ли система работать на одноядерном или многоядерном процессоре?

  • Является ли система распределенной системой?

  • Является ли платформа обработки гибридной или неоднородной?

  • Использует ли архитектура симметричную или асимметричную мультипроцессорную обработку? Если это асимметрично, как программное обеспечение платформы разделяется между центральными процессорами?

Платформы обработкиМногоядерные процессорные целевые системы
  • Вы хотите сгенерировать и запустить независимый исполняемый файл, который не требует внешнего ядра реального времени или операционной системы?

  • Требуется ли операционная система (RTOS) в реальном времени? Если да, то какой RTOS?

Ядро, операционная система

Шаблоны модели для генерации кода

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. Модель сконфигурирована, чтобы использовать дискретный решатель с фиксированным шагом.

Чтобы создать модель из шаблона:

  1. На MATLAB® home tab, нажмите Simulink.

  2. На начальной странице Simulink разверните Embedded Coder.

  3. Наведите указатель мыши на шаблон и щелкните Create Model. Новая модель, которая использует содержимое шаблона и настройки, появится в окне Редактор.

Для получения дополнительной информации, например, о создании и использовании шаблона в качестве исходного проекта, см. раздел «Создание шаблона из модели».

Похожие темы