Идентифицируйте необходимые файлы и интерфейсы для вызова сгенерированного кода во внешнем процессе сборки.
Узнать, как:
Собирайте файлы, необходимые для создания интегрированного кода за пределами Simulink ®.
Интерфейс с внешними переменными и функциями.
Для получения информации о модели примера и связанных примерах смотрите Подготовьте модель алгоритма управления для генерации кода C.
Код, который генерирует Embedded Coder ®, требует файлов поддержки, которые предоставляет MathWorks ®. Чтобы переместить сгенерированный код в другую среду разработки, например в специальную систему сборки, необходимо переместить эти файлы поддержки. Вы можете упаковать эти файлы в zip-файл с помощью packNGo
утилита. Эта утилита находит и упакует файлы, которые вам нужно создать исполняемый образ. Утилита использует инструменты для настройки процесса сборки после генерации кода, которые включают buildinfo_data
структуру, и packNGo
функция. Эти файлы включают внешние файлы, которые вы идентифицируете в панели Генерации кода > Пользовательский Код в диалоговом окне Параметров конфигурации модели. Утилита сохраняет buildinfo
MAT-файл в model
_ert_rtw
папка.
Откройте модель примера, rtwdemo_PCG_Eval_P5
.
Эта модель сконфигурирована для выполнения packNGo
после генерации кода.
Сгенерируйте код из всей модели.
Чтобы сгенерировать zip- файла вручную:
Загрузите файл buildInfo.mat
(расположен в rtwdemo_PCG_Eval_P5_ert_rtw
подпапка).
В командной строке введите команду packNGo(buildInfo)
.
Количество файлов в zip-файле зависит от версии Embedded Coder ® и от конфигурации модели, которую вы используете. Компилятору может потребоваться подмножество файлов в zip-файле. Скомпилированный размер исполняемого файла (RAM/ROM) зависит от процесса связывания. Линкер, вероятно, включает только файлы объектов, которые необходимы.
В этом примере показано, как интегрировать сгенерированный код в существующую основу кода. В примере используются IDE Eclipse™ и компилятор Cygwin™/gcc. Необходимые задачи интегрирования являются общими для окружений интегрирования.
Полноценная система управления состоит из нескольких аппаратных и программных компонентов. Алгоритмы управления являются только одним типом компонента. Другие компоненты могут быть:
Операционная система (ОС)
Слой планирования
Физический аппаратный ввод-вывод
Низкоуровневые драйверы аппаратных устройств
Как правило, вы не используете сгенерированный код в этих компонентах. Вместо этого сгенерированный код включает интерфейсы, которые соединяются с этими компонентами. MathWorks ® предоставляет библиотеки блоков аппаратного интерфейса для многих распространенных встраиваемых контроллеров. Для примеров смотрите библиотеку блоков Целевые процессоры.
Этот пример предоставляет файлы, чтобы показать, как вы можете создать полную систему. Основной файл 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™ 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.
Можно установить файлы для этого примера, нажав на эту гиперссылку:
Кроме того, чтобы установить файлы вручную:
Создайте папку сборки (Eclipse_Build_P5
).
Разархивируйте файл rtwdemo_PCG_Eval_P5.zip
в папку сборки.
Удалите файлы rtwdemo_PCG_Eval_P5.c
, ert_main.c
и rt_logging.c
, которые заменяются example_main.c
.
Можно использовать отладчик Eclipse™, чтобы пройти и оценить поведение выполнения сгенерированного кода C. См. пример Установка и использование Cygwin и Eclipse.
Для упражнения модели с входными данными смотрите Test Generated Code.