Создайте интегрированный код вне окружения Simulink

Идентифицируйте необходимые файлы и интерфейсы для вызова сгенерированного кода во внешнем процессе сборки.

Узнать, как:

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

  • Интерфейс с внешними переменными и функциями.

Для получения информации о модели примера и связанных примерах смотрите Подготовьте модель алгоритма управления для генерации кода C.

Сбор и сборка необходимых данных и файлов

Код, который генерирует Embedded Coder ®, требует файлов поддержки, которые предоставляет MathWorks ®. Чтобы переместить сгенерированный код в другую среду разработки, например в специальную систему сборки, необходимо переместить эти файлы поддержки. Вы можете упаковать эти файлы в zip-файл с помощью packNGo утилита. Эта утилита находит и упакует файлы, которые вам нужно создать исполняемый образ. Утилита использует инструменты для настройки процесса сборки после генерации кода, которые включают buildinfo_data структуру, и packNGo функция. Эти файлы включают внешние файлы, которые вы идентифицируете в панели Генерации кода > Пользовательский Код в диалоговом окне Параметров конфигурации модели. Утилита сохраняет buildinfo MAT-файл в model_ert_rtw папка.

Откройте модель примера, rtwdemo_PCG_Eval_P5.

Эта модель сконфигурирована для выполнения packNGo после генерации кода.

Сгенерируйте код из всей модели.

Чтобы сгенерировать zip- файла вручную:

  1. Загрузите файл buildInfo.mat (расположен в rtwdemo_PCG_Eval_P5_ert_rtw подпапка).

  2. В командной строке введите команду packNGo(buildInfo).

Количество файлов в zip-файле зависит от версии Embedded Coder ® и от конфигурации модели, которую вы используете. Компилятору может потребоваться подмножество файлов в zip-файле. Скомпилированный размер исполняемого файла (RAM/ROM) зависит от процесса связывания. Линкер, вероятно, включает только файлы объектов, которые необходимы.

Интеграция сгенерированного кода с существующей системой

В этом примере показано, как интегрировать сгенерированный код в существующую основу кода. В примере используются IDE Eclipse™ и компилятор Cygwin™/gcc. Необходимые задачи интегрирования являются общими для окружений интегрирования.

Обзор окружения интегрирования

Полноценная система управления состоит из нескольких аппаратных и программных компонентов. Алгоритмы управления являются только одним типом компонента. Другие компоненты могут быть:

  • Операционная система (ОС)

  • Слой планирования

  • Физический аппаратный ввод-вывод

  • Низкоуровневые драйверы аппаратных устройств

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

Этот пример предоставляет файлы, чтобы показать, как вы можете создать полную систему. Основной файл example_main.c, которая содержит простую основную функцию, которая выполняет только основные действия для выполнения кода.

Просмотрите example_main.c.

Файл:

  • Определяет функциональные интерфейсы (прототипы функций).

  • Включает файлы, которые объявляют внешние данные.

  • Определяет extern данные.

  • Инициализирует данные.

  • Вызывает моделируемое оборудование.

  • Вызывает алгоритмические функции.

Порядок выполнения функции совпадает с порядком выполнения подсистемы в модели тестовой обвязки и в rtwdemo_PCG_Eval_P5.h. Если вы меняете порядок выполнения в example_main.cрезультаты, которые создаёт исполняемый образ, отличаются от результатов симуляции.

Соответствие системных интерфейсов

Интегрирование требует соответствия интерфейсов Data и Function сгенерированного кода и существующего системного кода. В этом примере example_main.c Файл импортов и экспортов данные через #include операторы и extern декларации. Файл также вызывает функции из сгенерированного кода.

Соедините входные данные

Система имеет три входных сигналов: pos_rqst, fbk_1, и fbk_2. Сгенерированный код обращается к двум сигналам обратной связи через прямую ссылку на импортированные глобальные переменные (класс памяти ImportedExtern). Код обращается к сигналу положения через импортированный указатель (класс памяти ImportedExternPointer).

Рукописный файл defineImportedData.c задает переменные и указатель мыши. Сгенерированный код не определяет переменные и указатель, потому что рукописный код определяет их. Вместо этого сгенерированный код объявляет импортированные данные (extern) в файле rtwdemo_PCG_Eval_P5_Private.h. В реальной системе данные обычно поступают из других программных компонентов или с аппаратных устройств.

Просмотрите defineImportedData.c.

Просмотрите rtwdemo_PCG_Eval_P5_Private.h.

Соедините выходные данные

В этом примере вы не получаете доступ к выходным данным системы. Пример Test Generated Code показывает, как можно сохранить выходные данные в стандартный файл журнала. Вы можете получить доступ к выходным данным, сославшись на файл rtwdemo_PCG_Eval_P5.h.

Просмотрите rtwdemo_PCG_Eval_P5.h.

Доступ к дополнительным данным

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

  • Блокируйте значения состояния (интегратор, передаточные функции)

  • Локальные параметры

  • Время

В таблице перечислены общие структуры данных. В зависимости от строения модели, комбинация этих структур появляется в сгенерированном коде. Данные объявлены в файле rtwdemo_PCG_Eval_P5.h, но в этом примере вы не получаете доступ к этим данным.

Data Type      Data Name     Data Purpose 
Constants      |model_cP|    Constant parameters
Constants      |model_cB|    Constant block I/O
Output         |model_U|     Root and atomic subsystem input
Output         |model_Y|     Root and atomic subsystem output
Internal data  |model_B|     Value of block output
Internal data  |model_D|     State information vectors
Internal data  |model_M|     Time and other system level data
Internal data  |model_Zero|  Zero-crossings
Parameters     |model_P|     Parameters

Соответствие интерфейсов вызова функции

По умолчанию функции, которые генерирует генератор кода, имеют void Func(void) интерфейс. Если вы конфигурируете подсистему модели или атомарную подсистему, чтобы сгенерировать повторяющийся код, генератор кода создает более сложный прототип функции. В этом примере example_main функция вызывает сгенерированные функции с допустимыми входными параметрами.

Вызовы функции PI_Cntrl_Reusable использовать смесь отдельных неструктурированных глобальных переменных и структур данных Coder™ Simulink ®. Рукописный код определяет эти переменные. Типы структур определены в rtwdemo_PCG_Eval_P5.h.

Создайте проект в Eclipse™ окружению

Этот пример использует Eclipse™ IDE и Cygwin™ отладчик GCC для создания встраиваемой системы. В примере представлены файлы установки для обеих программ. Программные компоненты и номера версий:

  • Eclipse™ SDK 3.2

  • Eclipse™ CDT 3.3

  • Cygwin™/GCC 3.4.4-1

  • Cygwin™/GDB 20060706-2

Для установки и использования Eclipse™ и GCC см. раздел Установка и использование Cygwin и Eclipse.

Можно установить файлы для этого примера, нажав на эту гиперссылку:

Настройте папку сборки.

Кроме того, чтобы установить файлы вручную:

  1. Создайте папку сборки (Eclipse_Build_P5).

  2. Разархивируйте файл rtwdemo_PCG_Eval_P5.zip в папку сборки.

  3. Удалите файлы rtwdemo_PCG_Eval_P5.c, ert_main.c и rt_logging.c, которые заменяются example_main.c.

Можно использовать отладчик Eclipse™, чтобы пройти и оценить поведение выполнения сгенерированного кода C. См. пример Установка и использование Cygwin и Eclipse.

Для упражнения модели с входными данными смотрите Test Generated Code.

Похожие темы

Похожие темы