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

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

Узнать, как к:

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

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

Для получения информации о модели в качестве примера и связанных примерах, смотрите, Генерируют код С от Алгоритма управления для Встраиваемой системы.

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

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

Обзор среды интегрирования

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

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

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

  • Ввод-вывод физического оборудования

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

Как правило, вы не используете сгенерированный код в этих компонентах. Вместо этого сгенерированный код включает интерфейсы, которые соединяются с этими компонентами. 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.

Чтобы осуществить модель с входными данными, смотрите Тестовый Сгенерированный код.

Похожие темы

Похожие темы