При использовании Simulink ® Coder™ для создания кода для быстрого прототипирования важно разрабатывать модели Simulink с учетом создания кода с самого начала процесса проектирования.
Simulink используется для разработки моделей, представляющих алгоритмы приложений и среды выполнения, из которых планируется создать развертываемый код. В зависимости от приложения можно развернуть код в среде выполнения, которая состоит из комбинации следующих элементов:
| Компоненты среды выполнения | Выбор |
|---|---|
| Оборудование |
|
| Ядра |
|
| Операционная система |
|
| Планирование |
|
| Код алгоритма приложения |
|
При разработке моделей для создания кода C или C++ для быстрого создания прототипов или производственного развертывания следует учитывать среду выполнения. Создание кода, соответствующего требованиям внедрения и позволяющего избежать возможных доработок проекта. Как показано в предыдущей таблице, среда выполнения для генерируемого кода может варьироваться от относительно простого до сложного. Например, простой случай - это код, генерируемый на основе однозадачной модели, работающей на одноядерном микропроцессоре. Сложный случай - это код, который генерируется из модели, разделенной для работы в виде распределенной системы на многоядерном микропроцессоре и FPGA.
Частью среды выполнения приложения является платформа выполнения программного обеспечения, отвечающая за планирование и выполнение сгенерированного кода. Это программное обеспечение может существовать заранее, как в случае операционной системы и ее планировщика, или вы можете кодировать программное обеспечение вручную. Уровень сложности зависит от того, какой из следующих сценариев моделирования и создания кода применяется:
Создание кода из одной модели верхнего уровня, которая представляет алгоритмы, предназначенные для выполнения в среде выполнения.
Создание кода из модели, представляющей часть общего алгоритма. Созданный код можно смешать с кодом, написанным вручную, и кодом, сгенерированным из других источников или версий продуктов MathWorks ®.
Для одной модели верхнего уровня платформа выполнения программного обеспечения отвечает за выполнение сгенерированного кода так же, как Simulink моделирует модель. Функции в сгенерированном коде хорошо скоординированы и оптимизированы, поскольку Simulink знает о зависимостях. Платформа взаимодействует с кодом, созданным только для модели верхнего уровня. Код, созданный для верхней модели, обрабатывает взаимодействие с кодом для ссылочных блоков модели.
Рассмотрим следующий пример, в котором одна модель верхнего уровня сопоставляется с задачами, выполняющимися на одноядерном процессоре.

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

В этом сценарии Simulink не знает о зависимостях модели. Функции в коде, сгенерированном из различных моделей, минимально скоординированы и оптимизированы. Например, модели могут совместно использовать сгенерированные служебные функции. Потенциальные оптимизации, пересекающие границы модели, невозможны. Необходимо разработать структуру выполнения программного обеспечения с учетом зависимостей между единицами кода, включая порядок выполнения. Для приложения, которое требует параллельного выполнения на нескольких ядрах, необходимо учитывать эффекты задержки данных на всех ядрах.
Генератор кода помогает решить проблемы инфраструктуры выполнения программного обеспечения, такие как общий доступ к глобальным данным и предотвращение конфликтов идентификаторов. Код, созданный для каждой модели, обрабатывает интерфейс для ссылочных блоков модели.
При разработке моделей для быстрого развертывания прототипов следует учитывать эти факторы проектирования.
| Алгоритмы моделирования | Учитывая начальное состояние и входные данные, набор задач или инструкций, которые эффективно дают нужный результат. |
| Интерфейсы моделирования | Механизмы, которые позволяют компонентам алгоритма обмениваться информацией через границы компонентов. |
| Системы моделирования | Коллекция компонентов алгоритма, которые достигают цели или результата более высокого уровня, специфичного для домена. Компоненты часто совместно используют ресурсы. |
| Моделирование сред выполнения | Инфраструктура, которая обрабатывает планирование ресурсов системного алгоритма и выполнение. |
Рассмотрим следующие вопросы, касающиеся возможностей моделирования. При проектировании моделей используйте информацию, приведенную в ответах на вопросы, в качестве руководства. Разработка модели с учетом конкретной среды выполнения во время выполнения может помочь избежать доработки и будущих затрат на преобразование и обслуживание.
| Вопросы архитектуры | Соображения по моделированию | Связанная информация |
|---|---|---|
| Что такое системный домен? | Предпосылки для продукта (на основе областей компонентов) |
|
| Включает ли система физические области, такие как механические, электрические или гидравлические области? | Физические системы | |
| Какие аспекты алгоритма вы можете представить с блоками, предоставляемыми продуктами MathWorks? Какие блоки необходимо создать? | Блокировать использование, создание и настройку | |
| Включает ли архитектура компоненты конечного автомата? | Система, управляемая событиями | Модель реактивных систем в потоке состояний (поток состояний) |
| Вопросы архитектуры | Соображения по моделированию | Связанная информация |
|---|---|---|
| Представление данных | |
| Где и как данные поступают в систему и передаются в систему? | Вход | |
| Продукция | |
| Функции и вызовы функций | Конфигурирование генерации кода C для функций точек входа модели |
| Нужно ли экспортировать функции, которые вызываются управляющей логикой, находящейся вне модели? | Экспорт функции | |
| Контролирует ли система сигналы или данные журнала (например, для калибровки)? | Интерфейсы обмена данными C API и ASAP2 | |
| Требуется ли замена кода, созданного для функций или операторов, например, для оптимизации кода для конкретного оборудования? | Замена кода |
|
| Существует ли потребность в проработке и будущих соображениях? | Проработка и будущие соображения |
| Вопросы архитектуры | Соображения по моделированию | Связанная информация |
|---|---|---|
| Компонентизация | |
| Ссылка на модель | |
| Вы моделируете архитектуру клиент-сервер? | Блоки функции Simulink и вызывающего абонента | |
| Доступен ли соответствующий устаревший или пользовательский код? | Интеграция внешнего кода | Что такое интеграция внешнего кода? (Встроенный кодер) |
| Можно ли применить эталонную архитектуру или ссылочные компоненты? | Модели и шаблоны проектов | |
| Можно ли повторно использовать функции? | Повторное использование функции | |
| Общие данные |
| Вопросы архитектуры | Соображения по моделированию | Связанная информация |
|---|---|---|
| Интерфейс среды выполнения |
|
| Разделяется ли система на параллельные компоненты для максимизации параллелизма? Какие компоненты? | Параллелизм | |
| Тактовые сигналы и тактовые частоты | |
| Планирование на основе времени | |
| Планирование на основе событий | |
| Должна ли система обрабатывать события инициализации, сброса или завершения? | Инициализация, сброс, завершение | |
| Выполнение задачи | |
| Платформы обработки | Цели многоядерных процессоров |
Embedded Coder ® предоставляет набор встроенных шаблонов для использования в качестве отправной точки при создании моделей для обычных проектов приложений. Используйте шаблоны для создания моделей, предварительно настроенных для создания кода для встроенных системных приложений.
| Шаблон | Описание |
|---|---|
| Система генерации кода | Базовая модель, состоящая из блока Inport и блока Output. |
| Экспортированные функции | Модель генерации кода из подсистем вызова функций. Можно экспортировать каждую подсистему вызова функций отдельно, щелкнув правой кнопкой мыши подсистему, выбрав C/C + + Code > Export Functions и щелкнув Build. |
| Фиксированный шаг, многоскоростной режим | Модель с фиксированным шагом, использующая несколько скоростей и состоящая из блоков Inport, блока Outport и блока Sum. Модель сконфигурирована для использования дискретного решателя с фиксированным шагом и для использования двух скоростей с параметром конфигурации модели Периодические временные ограничения выборки установлены в Unconstrained и параметр Обрабатывать каждую дискретную скорость как отдельную выбранную задачу. Simulink вставляет блок Rate Transition для обработки двух скоростей выборки. |
| Фиксированный шаг, одинарная ставка | Модель с фиксированным шагом, использующая одну скорость и состоящая из блоков Inport, блока Outport и блока Sum. Модель настроена на использование дискретного решателя с фиксированным шагом. |
Чтобы создать модель из шаблона, выполните следующие действия.
На вкладке Главная страница MATLAB ® щелкните Simulink.
На начальной странице Simulink разверните Embedded Coder.
Наведите курсор на шаблон и щелкните Создать модель (Create Model). В окне редактора Simulink Editor появится новая модель, использующая содержимое и настройки шаблона.
Дополнительные сведения, например, о создании и использовании шаблона в качестве ссылочной конструкции, см. в разделе Создание шаблона из модели.