exponenta event banner

Создание интегрированного кода вне среды Simulink

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

Узнайте, как:

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

  • Взаимодействие с внешними переменными и функциями.

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

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

Для создания кода Embedded Coder ® требуются файлы поддержки, предоставляемые MathWorks ®. Чтобы переместить созданный код в другую среду разработки, такую как выделенная система сборки, необходимо переместить эти файлы поддержки. Эти файлы можно упаковать в zip-файл с помощью packNGo утилита. Эта утилита находит и упаковывает файлы, необходимые для создания исполняемого образа. Утилита использует инструменты для настройки процесса сборки после создания кода, которые включают buildinfo_data структура и packNGo функция. Эти файлы включают внешние файлы, которые определяются на панели Создание кода (Code Generation) > Пользовательский код (Custom Code) диалогового окна Параметры конфигурации модели (Model Configuration Parameters). Утилита сохраняет 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результаты, которые создает исполняемое изображение, отличаются от результатов моделирования.

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

Интеграция требует согласования интерфейсов данных и функций сгенерированного кода и существующего системного кода. В этом примере 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.

Подключение выходных данных

В этом примере доступ к выходным данным системы не выполняется. В примере «Тест сгенерированного кода» показано, как можно сохранить выходные данные в стандартном файле журнала. Доступ к выходным данным можно получить, обратившись к файлу. 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 использовать смесь отдельных неструктурированных глобальных переменных и структур данных Simulink ® Coder™. Эти переменные определяются рукописным кодом. Типы структуры определены вrtwdemo_PCG_Eval_P5.h.

Создание проекта в среде Eclipse™

Этот пример использует IDE Eclipse™ и отладчик 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.

Для выполнения модели с входными данными см. Тест сгенерированного кода.

Связанные темы

Связанные темы