Чтобы использовать код, который вы генерируете из модели, вы вызываете сгенерированные функции точки входа. Среда вызова и сгенерированные функции обмениваются входными и выходными данными, например, как глобальные переменные или аргументы функции. Корневой уровень блоки Outport (выходные порты) составляет выходные данные интерфейса. Чтобы интегрировать и развернуть сгенерированный код в объемные приложения, можно настроить, как генератор кода производит интерфейсный код, включая то, как выходные данные объявлены и обработаны. Индивидуальные настройки могут:
Минимизируйте модификации, которые вы делаете к существующему коду.
Сгенерируйте устойчивые интерфейсы, которые не изменяются или минимально изменяются, когда вы вносите изменения в свою модель.
Сгенерируйте код, который обменивается данными более эффективно (например, при помощи указателей и аргументов передачи ссылкой для нескалярных данных).
Для генерации кода примеры показывают, как настроить интерфейс выходного порта для модели rtwdemo_configinterface
. Можно сконфигурировать отображения кода при помощи Code Mappings Editor или API отображений кода (coder.mapping.api.CodeMapping
).
По умолчанию выходные порты корневого уровня в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием
. На основе ваших требований интерфейса кода решите, настроить ли генерацию данных о выходном порте. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление выходных портов в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:model
_ExtY
Настроить ли настройку по умолчанию
Если модель включает значительное количество (например, больше чем 10) выходных портов корневого уровня, более эффективно сконфигурировать выходные порты с настройкой по умолчанию и переопределением та установка для особых случаев. Если модель включает несколько выходных портов, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование выходных портов индивидуально.
Как объявить и обработать данные о выходном порте в сгенерированном интерфейсе
Как разделяют глобальные переменные
Записать выходные данные в глобальные переменные, заданные во внешнем коде
Для выходных портов модели, на которые ссылаются, как глобальные переменные (void-void
)
Как вызывает к функциям доступа. Требует Embedded Coder®
Как аргументы функции точки входа. Требует Embedded Coder
Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.
Другие факторы включают ли в:
Назовите выходные порты в сгенерированном коде при помощи меток блока Outport, которые появляются в модели или при помощи идентификаторов уникального кода.
Включайте volatile
введите спецификатор в определениях глобальной переменной и объявлениях. Требует Embedded Coder. Смотрите Защищают Глобальные данные с const и энергозависимыми Спецификаторами Типа.
Запишите данные из определенной области памяти. Требует Embedded Coder. Смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм.
Поскольку список списков соединяет интерфейсом с требованиями, которые относятся к выходным портам с соответствующими классами памяти и свойствами класса памяти, видят, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Требования интерфейса Outport, например, модель rtwdemo_configinterface
:
Используйте определение типа проекта MYTYPE
заданный в rtwdemo_configinterface_data.m
.
Объявите переменную для выходного порта Out1
в сгенерированном внешнем заголовочном файле exOutSys.h
и задайте переменную в исходном файле определения exOutSys.c
. Данные записаны в Out1
выход кода, сгенерированного для блока switch.
Переменную, представляющую выходной порт в сгенерированном коде, нужно назвать output1
. То имя является именем переменной, что внешний код соединяет интерфейсом с использованием, чтобы получить доступ к выходным данным.
В данном примере сконфигурируйте выходной порт в rtwdemo_configinterface
удовлетворять эти требования генерации кода.
Настройка генерации кода по умолчанию для выходных портов корневого уровня может уменьшать усилие по подготовке модели для генерации кода, особенно если модель имеет значительное количество выходных портов. Выберите параметры конфигурации однажды, и генератор кода применяет те настройки к выходным портам через модель. Simulink® хранит настройку по умолчанию как часть модели.
Рассмотрите конфигурирующие настройки генерации кода по умолчанию для выходных портов модели, если ваша модель использует несколько выходных портов корневого уровня, которые не имеют уникальных требований, или использует разделяемый Словарь Embedded Coder.
Модель в качестве примера rtwdemo_configinterface включает один выходной порт корневого уровня. В этом примере показано, как использовать Code Mappings Editor, чтобы сконфигурировать настройки по умолчанию для выходных портов корневого уровня. Укажите что переменные code generator declare и define, чтобы представлять корневые выходные порты в сгенерированном внешнем заголовке и файлах определения. Назовите сгенерированный внешний заголовочный файл по умолчанию exOutSys.h
и сгенерированный файл определения exOutSys.c
.
Открытая модель rtwdemo_configinterface
в качестве примера. Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Embedded Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
В редакторе Отображений Кода, под Inports and Outports, избранная категория Outports. Установите класс памяти по умолчанию на ExportToFile
.
В Property Inspector, Заголовочном файле набора к exOutSys.h
и файл определения к exOutSys.c
.
Сохраните модель.
Можно сконфигурировать отдельные выходные порты корневого уровня для генерации кода. Например, если модель имеет два выходных порта корневого уровня, которые имеют требования генерации уникального кода, конфигурируют выходные порты индивидуально. Или, если вы конфигурируете настройки по умолчанию для выходных портов, конфигурируете отдельные выходные порты, чтобы использовать настройки по умолчанию или уникальные настройки.
Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для выходных портов индивидуально:
Использование несколько выходных портов, которые имеют уникальные требования.
Использование немного выходных портов.
Имеет настройку по умолчанию для выходных портов, и необходимо заменить настройку для некоторых определенных выходных портов.
В этом примере показано, как использовать редактор Отображений Кода, чтобы применить настройку генерации кода по умолчанию для выходных портов в модели rtwdemo_configinterface
. В предыдущем примере вы устанавливаете класс памяти по умолчанию для выходных портов к ExportToFile
. Требование задает тот выходной порт Out1
запишите выходные данные в глобальную переменную, объявленную и заданную в сгенерированном заголовке и файлах определения, доступных для внешнего кода.
Пример также показывает, как сконфигурировать идентификатор, который генератор кода использует для именования выходного порта в сгенерированном коде. Можно задать идентификаторы генерации кода, например, для интегрирования, не изменяя проект модели.
Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для Выходных портов Корневого Уровня.
В редакторе Отображений Кода кликните по вкладке Outports. Редактор перечисляет имена блоков Выходного порта и элементов шины, которые находятся в модели. Если порт решает к объекту сигнала, решимость сигнализировать, что объектный значок появляется справа от имени элемента. Класс памяти для выходного порта в модели в качестве примера установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти ExportToFile
.
Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default
.
Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того выходного порта.
Сконфигурируйте генератор кода, чтобы применить установку класса памяти по умолчанию на выходной порт Out1
. Выберите строку для выходного порта. Установите класс памяти на Model default: ExportToFile
.
Класс памяти для выбранного выходного порта превращается в Model default: ExportToFile
.
Сконфигурируйте идентификатор кода для выходного порта так, чтобы интерфейсное имя аргумента в сгенерированном коде совпадало с интерфейсным именем, используемым внешним кодом. В редакторе Отображений Кода выберите строку для выходного порта. В Property Inspector, набор свойство Identifier к output
.
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в файле rtwdemo_configinterface.c
, найдите где переменная output
используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
Чтобы автоматизировать настройку выходных портов корневого уровня для генерации кода, используйте интерфейс программирования для отображений кода. Например, при создании библиотек пользовательского блока или части тестовой среды приложения, используйте интерфейс программирования, чтобы автоматизировать настройку данных.
В этом примере показано, как использовать интерфейс программирования, чтобы сконфигурировать настройки по умолчанию для выходных портов корневого уровня для модели rtwdemo_configinterface.
Сконфигурируйте код идентификатор для выходного порта так, чтобы имя глобальной переменной в сгенерированном коде совпадало с именем переменной во внешнем интерфейсе кода.
Откройте модель в качестве примера.
open_system('rtwdemo_configinterface')
Создайте объект cm
путем вызывания функции coder.mapping.api.get
. Объектно-ориентированная память настройка генерации кода для элементов данных и функций в модели rtwdemo_configinterface
.
cm = coder.mapping.api.get('rtwdemo_configinterface');
Сконфигурируйте настройки по умолчанию для выходных портов путем вызывания функции setDataDefault
. Для аргументов задайте эти значения.
Объект, возвращенный coder.mapping.api.get
Outports
для категории по умолчанию
Имя свойства StorageClass
это имеет значение свойства ExportToFile
Имя свойства HeaderFile
это имеет значение свойства exOutSys.h
и имя свойства DefinitionFile
это имеет значение свойства exOutSys.c
, имена для сгенерированных файлов, которые объявляют и задают выходные данные
setDataDefault(cm,'Outports','StorageClass','ExportToFile','HeaderFile','exOutSys.h',... 'DefinitionFile','exOutSys.c')
Проверьте свою настройку по умолчанию для выходных портов. Издайте три приказа к getDataDefault
это задает объект, возвращенный coder.mapping.api.get
и категория Outports
.
В первом вызове задайте третий аргумент как свойство StorageClass
.
Во втором вызове, для третьего аргумента, задают HeaderFile
.
В третьем вызове, для третьего аргумента, задают DefinitionFile
.
getDataDefault(cm,'Outports','StorageClass') ans = 'ExportToFile' getDataDefault(cm,'Outports','HeaderFile') ans = 'exOutSys.h' getDataDefault(cm,'Outports','DefinitionFile') ans = 'exOutSys.c'
Примените настройку выходного порта по умолчанию для выходного порта Out1
.
По умолчанию Simulink устанавливает класс памяти для отдельных выходных портов к Auto
. Когда классом памяти является Auto
, генератор кода:
Определяет, устранить ли данные из сгенерированного кода в целях оптимизации.
При сохранении данных, определяет, как эффективно представлять данные в сгенерированном коде, учитывая параметры конфигурации по умолчанию.
Чтобы управлять настройкой для выходного порта, вызовите функцию setOutport
.
Издайте приказ к setOutport
это задает:
Объект, возвращенный coder.mapping.api.get
Имя блока выходного порта Out1
Класс памяти по умолчанию ранее установлен для выходного порта при помощи свойства StorageClass
и значение свойства Model default
Свойство Identifier
и значение свойства output
setOutport(cm,'Out1','StorageClass','Model default','Identifier','output');
Проверьте свои изменения конфигурации путем вызывания функции getOutport
. Задайте объект, возвращенный coder.mapping.api.get
, имя блока выходного порта и свойство StorageClass
или Identifier
.
getOutport(cm,'Out1','StorageClass') ans = 'Model default' getOutport(cm,'Out1','Identifier') ans = 'output'
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в файле rtwdemo_configinterface.c
, найдите где переменная output
используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
В зависимости от ваших требований генерации кода примите решение из этих классов памяти сконфигурировать генерацию кода для выходных портов корневого уровня.
Требования | Класс памяти |
---|---|
Включите оптимизацию, потенциально генерируя более эффективный код. | Автоматический (Только отдельные отображения) |
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных. | Значение по умолчанию (Значение по умолчанию, сопоставляющее только) |
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте отображение значения по умолчанию для категории элемента данных. | Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения) |
Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях. | Битовое поле (Только отдельные отображения) |
Сгенерируйте определение глобальной переменной и объявление, которое имеет volatile введите спецификатор. | Volatile (См. Const, энергозависимый, и ConstVolatile), |
Сгенерируйте определение глобальной переменной и объявление. | ExportedGlobal |
Сгенерируйте определение глобальной переменной и объявление к заданному файлу. | ExportToFile |
Сгенерируйте код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа. | GetSet |
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним заголовочным файлом. | ImportFromFile |
Сгенерируйте переменные, которые локальны для функций. | Локализуемый |
Сгенерируйте глобальную структуру, которая имеет имя, которое можно задать. | Struct (Только отдельные отображения) |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры.
Для отдельного выходного порта используйте свойство класса памяти Identifier сконфигурировать имя для переменной, представляющей выходной порт в сгенерированном коде. С Embedded Coder, в зависимости от класса памяти, который вы выбираете, можно также сконфигурировать эти свойства.
Свойство | Описание | Классы памяти |
---|---|---|
DefinitionFile | Исходный файл определения, который содержит определения для глобальных данных, которые считаны выходным портом и внешним кодом | ExportToFile и Volatile |
GetFunction | Выходной порт появляется в сгенерированном коде как вызов заданного get функция | GetSet |
HeaderFile | Имя сгенерированного исходного заголовочного файла, который содержит объявления для глобальных данных, которые записаны выходным портом и внешним кодом | ExportToFile , GetSet , ImportFromFile , и Volatile |
Memory Section (только настройка выходного порта по умолчанию) | Раздел Memory, который содержит данные, записанные выходным портом | Default |
Owner | Генератор кода помещает определение для выходных портов в коде, сгенерированном для одной из многоуровневых моделей в иерархии модели та доля определения. Необходимо выбрать параметр конфигурации модели Use owner from data object for data definition placement. Смотрите Размещение Управления Определений Глобальных данных и Объявлений в Сгенерированных Файлах. | ExportToFile и Volatile |
PreserveDimensions | Генератор кода сохраняет размерности данных о выходном порте, которые представлены в сгенерированном коде как многомерный массив. Необходимо установить параметр конфигурации модели Array layout на Row-major . Смотрите размерности заповедника многомерных массивов в сгенерированном коде. | ExportToFile , ImportFromFile , Localizable , и Volatile |
SetFunction | Выходной порт появляется в сгенерированном коде как вызов заданного set функция. | GetSet |
StructName | Назовите для структуры в сгенерированном коде для выходного порта. | BitField и Struct |
Редактор отображений кода | coder.mapping.api.CodeMapping