Если вы требуете перемещения файлов статического и сгенерированного кода для модели к другой среде разработки, используйте утилиту упаковывать-и-идти. Это условие происходит, когда ваша система или интегрированная среда разработки (IDE) не включают продукты Simulink® и MATLAB®.
pack-n-go утилита использует инструменты для настройки процесса сборки после генерации кода и функции packNGo
, чтобы найти и группировать файлы для создания исполняемого изображения. Файлы группированы в сжатом файле, что можно переместить и распаковать использование стандартной утилиты zip
.
К файлам типового кодекса пакета можно сделать любое из следующего:
Используйте образцовую опцию Package code and artifacts (Simulink Coder) в Configuration Parameters> панель Code Generation. См., что Код Пакета Использует Пользовательский интерфейс.
Используйте команды MATLAB, чтобы сконфигурировать параметр PostCodeGenCommand
с вызовом функции packNGo
. См., что Код Пакета Использует Интерфейс командной строки. Интерфейс командной строки обеспечивает больше управления деталями упаковки кода.
Группировать и перемещать код для вашей модели с помощью пользовательского интерфейса:
Откройте Configuration Parameters> Code Generation.
Выберите опцию Package code and artifacts (Simulink Coder). Эта опция конфигурирует процесс сборки, чтобы запустить функцию packNGo
после генерации кода, чтобы группировать сгенерированный код и артефакты для перемещения.
В поле Zip file name (Simulink Coder) введите имя файла zip
, в котором можно группировать сгенерированный код и артефакты для перемещения. Можно задать имя файла с или без расширения .zip
. Если вы не задаете расширение или расширение кроме .zip
, утилита zip
добавляет the.zip
расширение. Если вы не задаете значение, процесс сборки использует имя
, где model.zip
является именем топ-модели, для которой генерируется код.model
Примените изменения и сгенерируйте код для своей модели. Чтобы проверить, что это готово к перемещению, осмотрите получившийся файл zip
. В зависимости от инструмента zip
, который вы используете, вы могли смочь открыть и осмотреть файл, не распаковывая его.
Переместите файл zip
к целевой среде разработки и распакуйте файл.
Группировать и перемещать код для вашей модели с помощью интерфейса командной строки:
Прежде чем вы сгенерируете и группируете файлы для сборки модели, решите, хотите ли вы, чтобы файлы были группированы в плоской или иерархической структуре папок. По умолчанию функция packNGo
группирует файлы в одной, плоской структуре папок.
Если... | Затем используйте... |
---|---|
Вы перемещаете файлы к IDE, который не использует сгенерированный make-файл, или код не зависит от относительного местоположения необходимых статических файлов | Одна, плоская структура папок |
Целевая среда разработки должна поддержать структуру папок исходной среды, потому что это использует сгенерированный make-файл, или код зависит от относительного местоположения файлов | Иерархическая структура |
Если вы используете иерархическую структуру, функция packNGo
создает два уровня файлов zip
, первичного файла zip
, который в свою очередь содержит следующие вторичные файлы zip
:
mlrFiles.zip
— файлы в вашем дереве папки
matlabroot
sDirFiles.zip
— файлы в и под вашей папкой сборки, где вы инициировали генерацию кода для модели
otherFiles.zip
— необходимые файлы не в деревьях папки
или matlabroot
start
Пути для вторичных файлов zip
относительно корневой папки первичного файла zip
, поддерживая исходную структуру папок разработки.
По умолчанию, имена функций packNGo
первичный файл zip
. У вас есть опция определения другого имени. Если вы задаете имя файла и не используете расширение типа файла, функция добавляет model
.
к имени, которое вы задаете.
Файлы типового кодекса пакета при помощи параметра конфигурации PostCodeGenCommand
, функции packNGo
и информационного объекта сборки для модели. Можно настроить упаковочную операцию, чтобы использовать:
Система сгенерированный информационный объект сборки.
В этом случае, прежде, чем сгенерировать типовой кодекс, используйте set_param
, чтобы установить параметр конфигурации PostCodeGenCommand
на явный вызов функции packNGo
. Например:
set_param(bdroot, 'PostCodeGenCommand', 'packNGo(buildInfo);');
После генерации и записи типового кодекса к диску и прежде, чем сгенерировать make-файл, эта команда дает процессу сборки команду оценивать вызов packNGo
. Эта команда использует систему сгенерированный информационный объект сборки для в настоящее время выбранной модели.
Информационный объект сборки, который вы создаете программно.
В этом случае вы могли использовать другие функции информации о сборке, чтобы включать пути и файлы выборочно в информационном объекте сборки, который вы затем задаете с функцией packNGo
. Например:
. . . myModelBuildInfo = RTW.BuildInfo; addSourceFiles(myModelBuildInfo, {'test1.c' 'test2.c' 'driver.c'}); . . . packNGo(myModelBuildInfo);
Следующие примеры показывают, как можно изменить поведение по умолчанию packNGo
.
К... | Задать... |
---|---|
Измените структуру упаковки файла к иерархическому | packNGo(buildInfo, {'packType' 'hierarchical'}); |
Переименуйте первичный файл zip | packNGo(buildInfo, {'fileName' 'zippedsrcs'}); |
Измените структуру упаковки файла к иерархическому и переименуйте первичный файл zip | packNGo (buildInfo, {'packType' 'иерархический'... |
Включайте заголовочные файлы, найденные на включать пути в файле zip | packNGo(buildInfo, {'minimalHeaders' false}); |
Сгенерируйте предупреждения для ошибок анализа и недостающих файлов | packNGo (buildInfo, {'ignoreParseError' верный... |
Функция packNGo
может потенциально изменить информацию о сборке, переданную в первом аргументе packNGo
. Как часть упаковки типового кодекса, packNGo
мог найти дополнительные файлы из источника и включать пути, зарегистрированные в информацию о сборке для модели, и добавить их в информацию о сборке.
Чтобы проверить, что это готово к перемещению, осмотрите сгенерированный файл zip
. В зависимости от инструмента zip
, который вы используете, вы могли смочь открыть и осмотреть файл, не распаковывая его. При распаковке файла и вы группировали файлы типового кодекса как иерархическую структуру, распаковка требует, чтобы вы распаковали первичные и вторичные файлы zip
. Когда вы распаковываете вторичные файлы zip
, относительные пути файлов сохраняются.
Переместите сгенерированный файл zip
к целевой среде разработки и распакуйте файл.
Этот пример показывает, как группировать файлы кода, сгенерированные для модели rtwdemo_rtwintro
в качестве примера с помощью интерфейса командной строки:
Установите свою рабочую папку на перезаписываемую папку.
Откройте модель rtwdemo_rtwintro
и сохраните копию в вашу рабочую папку.
Введите следующую команду MATLAB:
set_param('rtwdemo_rtwintro', 'PostCodeGenCommand',... 'packNGo(buildInfo, {''packType'' ''hierarchical''})');
Необходимо удвоить одинарные кавычки из-за вложения символьных массивов 'packType'
и 'hierarchical'
в символьном массиве, который задает вызов packNGo
.
Сгенерируйте код для модели.
Осмотрите сгенерированный файл zip
, rtwdemo_rtwintro.zip
. Файл zip
содержит два вторичных файла zip
, mlrFiles.zip
и sDirFiles.zip
.
Осмотрите файлы zip
mlrFiles.zip
и sDirFiles.zip
.
Переместите файл zip
к целевой среде и распакуйте его.
Идентифицируйте требуемые файлы и интерфейсы для вызова сгенерированного кода во внешнем процессе сборки.
Узнать, как к:
Соберите файлы, требуемые для создания интегрированного кода за пределами Simulink®.
Интерфейс с внешними переменными и функциями.
Для получения информации о модели в качестве примера и связанных примерах, смотрите, Генерируют код С от Алгоритма управления для Встраиваемой системы.
Соберите и создайте необходимые данные и файлы
Код, который генерирует Embedded Coder®, требует файлов поддержки, которые обеспечивает MathWorks®. Чтобы переместить сгенерированный код к другой среде разработки, такой как специализированная система сборки, необходимо переместить эти файлы поддержки. Можно группировать эти файлы в zip-файле при помощи утилиты packNGo
. Эта утилита находит и группирует файлы, что необходимо создать исполняемое изображение. Утилита использует инструменты для настройки процесса сборки после генерации кода, которые включают структуру buildinfo_data
и функцию packNGo
. Эти файлы включают внешние файлы, которые вы идентифицируете в Генерации кода> панель Пользовательского кода в диалоговом окне Model Configuration Parameters. Утилита сохраняет MAT-файл buildinfo
в папке 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
.
Разработайте проект в среде 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.
Можно установить файлы для этого примера путем нажатия на эту гиперссылку:
Также устанавливать файлы вручную:
Создайте папку сборки (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.
Чтобы осуществить модель с входными данными, смотрите Тестовый Сгенерированный код.
Похожие темы
Для получения информации об ограничениях, которые применяются к этой функции, смотрите packNGo
.
Если процесс сборки использует подход make-файла шаблона, то packNGo
использует расширение исполняемого файла, заданное инструментом компоновщика, чтобы определить бинарные артефакты, которые требуют упаковки.
Если вы генерируете исполняемый файл с расширением, которое не является значением по умолчанию, проверяйте, что расширение сохранено в наборе инструментальных средств, сопоставленном с make-файлом шаблона. Для получения дополнительной информации смотрите Партнера Make-файл Шаблона с Набором инструментальных средств (Simulink Coder).
Если процесс сборки генерирует исполняемый файл с расширением, которое отличается от расширения, сохраненного в наборе инструментальных средств, packNGo
не группирует исполняемый файл.