Выполнение этих задач помогает вам выбрать рабочие процессы интегрирования внешнего кода и инструменты, которые соответствуют вашему проекту.
Задача | Действие | Дополнительная информация |
---|---|---|
1 | Разделите приложение, сопоставьте алгоритмы с компонентами и идентифицируйте точки интегрирования. | Модели проекта для сгенерированного развертывания встраиваемого кода |
2 | Определите, можно ли полагаться на код планирования, который генерирует генератор кода, или необходимо интегрировать сгенерированный код с механизмами планирования, которые характерны для вашего окружения выполнения. | Выберите среду выполнения программного обеспечения для планирования выполнения кода |
3 | Рассчитать признаки внешнего кода, который вы импортируете или в который вы экспортируете сгенерированный код. | Оценка характеристик внешнего кода |
4 | Определите требования к интегрированию, которые помогают с выбором оптимального инструментария для вашего интегрирования. | Идентифицируйте требования к интегрированию |
5 | По результатам заданий 1-4 выберите рабочий процесс. | Выбор рабочего процесса |
Генератор кода поддерживает два типа сред выполнения программного обеспечения - одну верхнюю модель и несколько верхних уровней, как описано в Модели Проекта for Generated Embedded Code Deployment. Первый вопрос для ответа касается того, какая из двух сред соответствует планированию и другим потребностям вашего проекта. Для примера можно импортировать внешний код в одну, основанную на скорости верхней частью модель. Можно экспортировать код из одной верхней части уровня или из нескольких моделей верхнего уровня для интегрирования с пользовательскими (внешними) механизмами планирования.
Единая верхняя часть
Сгенерируйте один набор файлов кода приложения из внешнего кода и кода, которые Simulink® Генератор кода C/C + + производит. Сгенерированный код включает планировщик. В этом случае вы импортируете код в окружение генерации кода Simulink.
Одна верхняя часть уровня или несколько моделей верхнего уровня
Интегрируйте код C or C++, который генератор кода производит из компонентов модели с кодом внешнего приложения и внешним планировщиком. Вы экспортируете сгенерированный код из окружения генерации кода Simulink.
Импорт вызовов кода драйвера внешнего устройства в модель и генерация кода для этой модели для экспорта включает импорт и экспорт кода.
Основываясь на целях и требованиях, интегрирование внешнего кода характеризуется несколькими способами, требующими различных рабочих процессов и интегрирования:
Импортируйте существующий внешний код в сгенерированный код.
Вызовите переиспользуемый код внешнего алгоритма для симуляции и генерации кода.
Поместите внешний код C/C + + в сгенерированный код.
Вызов драйверов внешних устройств.
Применить замену кода функции и оператора.
Интерфейс с прерыванием или планировщиком внешнего таймера.
Сгенерируйте код замены для конкретного окружения во время выполнения.
Экспорт сгенерированного кода для включения во внешнюю основу кода. Требуется Embedded Coder® .
Сгенерируйте исходный код компонента для экспорта.
Сгенерируйте общую библиотеку для экспорта.
Далее см. раздел Оценка признаков внешнего кода.
Перед выбором интегрирования внешнего рабочего процесса вычислите эти характеристики внешнего кода. Для взаимодействия с внешним кодом сгенерированный код C or C++ обрабатывает одну или несколько характеристик внешнего кода. Понимание этих характеристик и ваших требований к моделированию, симуляции и генерации кода помогает вам выбрать оптимальный рабочий процесс для сценария интегрирования. (См. раздел Идентификация интеграционных требований.)
Особенность | Что учитывать |
---|---|
Аппаратная зависимость | Зависят ли аппаратные средства внешнего кода? Служебные функции, интерполяционные таблицы и фильтры являются примерами независимого от оборудования кода. Драйверы устройств взаимодействуют непосредственно с оборудованием. Они зависят от характеристик оборудования. Например, драйвер устройства для аналого-цифрового преобразователя инициализирует, считывает данные из и записывает данные в аппаратные регистры. Аппаратные различия и зависимости касаются размера типа данных, бесконечности, операций сдвига, директивы компилятора и оптимизированной поддержки функций и операторов. Другие интерфейсы кода с драйверами устройств при помощи API и данных, сопоставленных с конкретными адресами памяти. Как правило, симуляция на компьютере разработчика невозможна. Чтение и запись в реестр во время симуляции на компьютере разработчика приводит к неожиданным и нежелательным результатам. |
Повторно используемый | Является ли внешний код переиспользуемым программным модулем? Примеры включают служебные функции, интерполяционные таблицы, фильтры, специализированные интеграторы и пропорционально-интегрально-производные (ПИД) модули управления. |
Зависимость от устойчивости данных между вызовами функций | Требует ли внешний код постоянных данных? Для примера вызов первого порядка функции filter использует выход предыдущего вызова функции, чтобы вычислить новый выход значение. У вас есть опция задать данные как глобальные или использовать общую память вне контекста функции. |
Набор данных и интерфейс | Насколько комплексны данные, которые использует внешний код? Как выглядит интерфейс данных? Он состоит из аргументов, возврата значения, глобальных переменных и функций доступа. Какие типы данных использует код? Ограничиваются ли типы базовыми целыми числами ANSI C, типами с плавающей точкой, массивами целых чисел или типами с плавающей точкой и указателями на эти типы? Включает ли интерфейс структуры или указатели на структуры? |
Код с фиксированной точкой | Предназначен ли внешний код для работы только на целочисленных процессорах? Если да, код обменивается и использует данные, представленные только в виде целых чисел. Данные могут быть связаны с масштабированием с фиксированной точкой или смещениями. |
Зависимости от внешних ресурсов | Используется ли внешний код данные, функции или макросы, определенные вне возможностей кода? Для примера функция может использовать стандартную функцию ANSI, общую библиотеку или предопределенные константы. В этих случаях необходимо сообщить компилятору и линкеру пути и имена файлов внешних ресурсов. |
Требуется внешний решатель | Вы используете внешнюю функцию для расширенной разработки или быстрого прототипирования, чтобы описать систему с непрерывной передаточной функцией или набором дифференциальных уравнений? Если да, внешний код полагается на внешний решатель. |
Перед выбором рабочего процесса интегрирования проверьте эти требования к интегрированию. Понимание этих требований и характеристик вашего внешнего кода помогает вам выбрать оптимальный рабочий процесс для сценария интегрирования. (См. «Оценка признаков внешнего кода».)
Требование | Что учитывать |
---|---|
Усилие | Какой уровень усилий запланирован для интегрирования проекта - низкий, средний, или высокий? |
Усилия по обучению | Каков опыт программирования назначенных ресурсов проекта? Сколько опыта назначены ресурсы с Simulink и MathWorks® Продукты генерации кода C/C + +? |
Симуляция и поведение генерации кода | Вы хотите воспользоваться преимуществами Модельно-ориентированное проектирование? Чтобы использовать все преимущества Модельно-ориентированное проектирование, преобразуйте код в элементы моделирования, которые можно затем использовать в Simulink и Stateflow® среда симуляции. Затем моделируйте и сгенерируйте код для интегрированного компонента. Используйте тестирование ПО в цикле (SIL) или ПО в цикле (PIL), чтобы проверить, является ли поведение алгоритма одинаковым в обоих окружениях. |
Интерфейс данных и набор текста |
|
Прямой вызов функции | Вызвать внешний код C непосредственно из модели? Вы можете выбрать один из механизмов, таких как Legacy Code Tool, интерфейс внешнего кода Stateflow и язык действий на графике, и MATLAB® Функциональный блок. |
Вставка внешнего кода в сгенерированный код | Вы хотите контролировать размещение внешнего кода в сгенерированном коде? Вставить код в сгенерированные функции точки входа? Можно поместить код в сгенерированный код с помощью параметров конфигурации модели или пользовательских блоков кода. |
Поддержка оптимизации генерации кода | Вы хотите оптимизировать код, который производит генератор кода? Если это так, можно сконфигурировать модель для генератора кода, чтобы оптимизировать код, который он производит, основываясь на целях приложения, таких как выполнение, ПЗУ и эффективность ОЗУ. У вас также есть опция использования библиотек замещения кода. |
Требуются файлы | Вы хотите минимизировать количество файлов, которые вы поддерживаете? Некоторые внешние инструменты интегрирования кода требуют, чтобы вы поддерживали отдельные файлы для определения симуляции и генерации кода. |
Далее см. раздел Выбор рабочего процесса.
Чтобы выбрать рабочий процесс для каждой точки интегрирования, используйте следующую блок-схему. Серые рамки идентифицируют общие рабочие процессы и предоставляют ссылки на дополнительную информацию. Щелкните серый ящик, который наилучшим образом удовлетворяет требованиям точки интегрирования.