Идентифицируйте требуемые файлы и интерфейсы для вызова сгенерированного кода во внешнем процессе сборки.
Узнать, как к:
Соберите файлы, требуемые для создания интегрированного кода за пределами Simulink®.
Интерфейс с внешними переменными и функциями.
Для получения информации о модели в качестве примера и связанных примерах, смотрите, Генерируют код С от Алгоритма управления для Встраиваемой системы.
Код, который генерирует Embedded Coder®, требует файлов поддержки, которые обеспечивает MathWorks®. Чтобы переместить сгенерированный код к другой среде разработки, такой как специализированная система сборки, необходимо переместить эти файлы поддержки. Можно группировать эти файлы в zip-файле при помощи packNGo
утилита. Эта утилита находит и группирует файлы, что необходимо создать исполняемое изображение. Утилита использует инструменты для настройки процесса сборки после генерации кода, которые включают buildinfo_data
структура и packNGo
функция. Эти файлы включают внешние файлы, которые вы идентифицируете в Генерации кода> панель Пользовательского кода в диалоговом окне Model Configuration Parameters. Утилита сохраняет 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. Необходимые задачи интегрирования характерны для сред интегрирования.
Полная встроенная система средств управления состоит из нескольких аппаратных и программных компонентов. Алгоритмы управления являются всего одним типом компонента. Другие компоненты могут быть:
Операционная система (OS)
Слой планирования
Ввод-вывод физического оборудования
Низкоуровневые драйверы аппаратного устройства
Как правило, вы не используете сгенерированный код в этих компонентах. Вместо этого сгенерированный код включает интерфейсы, которые соединяются с этими компонентами. MathWorks® предоставляет библиотеки блоков аппаратного интерфейса многим общим встроенным контроллерам. Для примеров смотрите библиотеку блоков Целевых процессоров.
Этот пример обеспечивает файлы, чтобы показать, как можно создать полную систему. Основным файлом является 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
.
Этот пример использует 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.
Можно установить файлы для этого примера путем нажатия на эту гиперссылку:
В качестве альтернативы устанавливать файлы вручную:
Создайте папку сборки (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.
Чтобы осуществить модель с входными данными, смотрите Тестовый Сгенерированный код.