Выберите рабочий процесс интегрирования внешнего кода

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

ЗадачаДействиеДополнительная информация
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), чтобы проверить, является ли поведение алгоритма одинаковым в обоих окружениях.
Интерфейс данных и набор текста
  • Ваша модель или сгенерированный код должны обмениваться данными с внешней функцией? Если это так, сопоставьте входы, выходы и параметры с интерфейсом внешней функции. Типичные функциональные интерфейсы включают аргументы функции и возвращаемые значения, глобальные переменные и функции доступа, такие как getRPM.

  • Представлять массивы, структуры или перечисленные типы? В окружение Simulink можно представлять эти типы как векторы, шины и IntEnum, соответственно.

  • Требуется ли поддержка с фиксированной точкой? Если вы используете интерфейс Simulink с фиксированной точкой, можно масштабировать и задавать смещения.

  • Использует ли внешний код специфичные для компании типы данных? Если да, и у вас есть программное обеспечение Embedded Coder, создайте типы псевдонимов, чтобы представлять эти внешние типы. Генератор кода использует типы псевдонимов в коде, который он производит. Для примера после определения можно задать тип псевдонима в прототипе функции, для временной переменной или для выхода блоков.

  • Код обменивается данными с общей памятью? Если да, задайте и используйте разделы памяти.

Прямой вызов функцииВызвать внешний код C непосредственно из модели? Вы можете выбрать один из механизмов, таких как Legacy Code Tool, интерфейс внешнего кода Stateflow и язык действий на графике, и MATLAB® Функциональный блок.
Вставка внешнего кода в сгенерированный кодВы хотите контролировать размещение внешнего кода в сгенерированном коде? Вставить код в сгенерированные функции точки входа? Можно поместить код в сгенерированный код с помощью параметров конфигурации модели или пользовательских блоков кода.
Поддержка оптимизации генерации кодаВы хотите оптимизировать код, который производит генератор кода? Если это так, можно сконфигурировать модель для генератора кода, чтобы оптимизировать код, который он производит, основываясь на целях приложения, таких как выполнение, ПЗУ и эффективность ОЗУ. У вас также есть опция использования библиотек замещения кода.
Требуются файлыВы хотите минимизировать количество файлов, которые вы поддерживаете? Некоторые внешние инструменты интегрирования кода требуют, чтобы вы поддерживали отдельные файлы для определения симуляции и генерации кода.

Далее см. раздел Выбор рабочего процесса.

Выбор рабочего процесса

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

Похожие темы