Чтобы использовать код, который вы генерируете из модели, вы вызываете сгенерированные функции точки входа. Среда вызова и сгенерированные функции обмениваются входными и выходными данными, например, как глобальные переменные или аргументы функции. Корневой уровень блоки Outport (выходные порты) составляет выходные данные интерфейса. Чтобы интегрировать и развернуть сгенерированный код в объемные приложения, можно настроить, как генератор кода производит интерфейсный код, включая то, как выходные данные объявлены и обработаны. Индивидуальные настройки могут:
Минимизируйте модификации, которые вы делаете к существующему коду.
Сгенерируйте устойчивые интерфейсы, которые не изменяются или минимально изменяются, когда вы вносите изменения в свою модель.
Сгенерируйте код, который обменивается данными более эффективно (например, при помощи указателей и аргументов передачи ссылкой для нескалярных данных).
Для генерации кода примеры показывают, как настроить интерфейс выходного порта для модели rtwdemo_configrpinterface
. Можно сконфигурировать отображения кода при помощи Code Mappings editor или API отображений кода (coder.mapping.api.CodeMapping
).
По умолчанию выходные порты корневого уровня в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием
. На основе ваших требований интерфейса кода решите, настроить ли генерацию данных о выходном порте. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление выходных портов в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:model
_ExtY
Настроить ли настройку по умолчанию
Если модель включает значительное количество (например, больше чем 10) выходных портов корневого уровня, более эффективно сконфигурировать выходные порты с настройкой по умолчанию и переопределением та установка для особых случаев. Если модель включает несколько выходных портов, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование выходных портов индивидуально.
Как объявить и обработать данные о выходном порте в сгенерированном интерфейсе
Как разделяют глобальные переменные
Записать выходные данные в глобальные переменные, заданные во внешнем коде
Для выходных портов модели, на которые ссылаются, как глобальные переменные (void-void
)
Как вызывает к функциям доступа. Требует Embedded Coder®
Как аргументы функции точки входа. Требует Embedded Coder
Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.
Другие факторы включают ли в:
Назовите выходные порты в сгенерированном коде при помощи меток блока Outport, которые появляются в модели или при помощи идентификаторов уникального кода.
Включайте volatile
введите спецификатор в определениях глобальной переменной и объявлениях. Требует Embedded Coder. Смотрите Защищают Глобальные данные с const и энергозависимыми Спецификаторами Типа (Embedded Coder).
Запишите данные из определенной области памяти. Требует Embedded Coder. Смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм (Embedded Coder).
Поскольку список списков соединяет интерфейсом с требованиями, которые относятся к выходным портам с соответствующими классами памяти и свойствами класса памяти, видят, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Требования интерфейса Outport, например, модель rtwdemo_configrpinterface
:
Запишите данные для выходного порта корневого уровня Out1
к внешнему заголовочному файлу. Данные записаны с Out1
выход кода, сгенерированного для блока switch.
Переменную, представляющую выходной порт в сгенерированном коде, нужно назвать output
.
В данном примере сконфигурируйте выходной порт в rtwdemo_configrpinterface
удовлетворять эти требования генерации кода.
Настройка генерации кода по умолчанию для выходных портов корневого уровня может уменьшать усилие по подготовке модели для генерации кода, особенно если модель имеет значительное количество выходных портов. Выберите параметры конфигурации однажды, и генератор кода применяет те настройки к выходным портам через модель. Simulink® хранит настройку по умолчанию как часть модели.
Рассмотрите конфигурирующие настройки генерации кода по умолчанию для выходных портов модели, если ваша модель использует несколько выходных портов корневого уровня, которые не имеют уникальных требований.
Модель rtwdemo_configrpinterface
в качестве примера включает один выходной порт корневого уровня. В этом примере показано, как использовать Code Mappings editor, чтобы сконфигурировать настройки по умолчанию для выходных портов корневого уровня. Укажите что переменные code generator declare и define, чтобы представлять корневые выходные порты в сгенерированном внешнем заголовке и файлах определения.
Открытая модель rtwdemo_configrpinterface
в качестве примера. Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Simulink Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
В редакторе Отображений Кода, под Inports and Outports, избранная категория Outports. Установите класс памяти по умолчанию на ExportedGlobal
.
Сохраните модель.
Можно сконфигурировать отдельные выходные порты корневого уровня для генерации кода. Например, если модель имеет два выходных порта корневого уровня, которые имеют требования генерации уникального кода, конфигурируют выходные порты индивидуально. Или, если вы конфигурируете настройки по умолчанию для выходных портов, конфигурируете отдельные выходные порты, чтобы использовать настройки по умолчанию или уникальные настройки.
Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для выходных портов индивидуально:
Использование несколько выходных портов, которые имеют уникальные требования.
Использование немного выходных портов.
Имеет настройку по умолчанию для выходных портов, и необходимо заменить настройку для некоторых определенных выходных портов.
В этом примере показано, как использовать редактор Отображений Кода, чтобы применить настройку генерации кода по умолчанию для выходных портов в модели rtwdemo_configrpinterface
. В предыдущем примере вы устанавливаете класс памяти по умолчанию для выходных портов к ExportedGlobal
.
Пример также показывает, как сконфигурировать идентификатор, который генератор кода использует для именования выходного порта в сгенерированном коде. Можно задать идентификаторы генерации кода, например, для интегрирования, не изменяя проект модели.
Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для Выходных портов Корневого Уровня.
В редакторе Отображений Кода кликните по вкладке Outports. Редактор перечисляет имена блоков Выходного порта и элементов шины, которые находятся в модели. Если порт решает к объекту сигнала, решимость сигнализировать, что объектный значок появляется справа от имени элемента. Класс памяти для выходного порта в модели в качестве примера установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти ExportedGlobal
.
Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default
.
Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того выходного порта.
Сконфигурируйте генератор кода, чтобы применить установку класса памяти по умолчанию на выходной порт Out1
. Выберите строку для выходного порта. Установите класс памяти на Model default: ExportedGlobal
.
Класс памяти для выбранного выходного порта превращается в Model default: ExportedGlobal
.
Сконфигурируйте идентификатор кода для выходного порта так, чтобы интерфейсное имя аргумента в сгенерированном коде совпадало с интерфейсным именем, используемым внешним кодом. В редакторе Отображений Кода выберите строку для выходного порта. Кликните по значку и установите свойство Identifier на output
.
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в файле rtwdemo_configrpinterface.c
, найдите где переменная output
используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
Чтобы автоматизировать настройку выходных портов корневого уровня для генерации кода, используйте интерфейс программирования для отображений кода. Например, при создании библиотек пользовательского блока или части тестовой среды приложения, используйте интерфейс программирования, чтобы автоматизировать настройку данных.
В этом примере показано, как использовать интерфейс программирования, чтобы сконфигурировать настройки по умолчанию для выходных портов корневого уровня для модели rtwdemo_configrpinterface
. Выходной порт корневого уровня пишет выход в отдельную глобальную переменную.
Сконфигурируйте код идентификатор для выходного порта так, чтобы имя глобальной переменной в сгенерированном коде совпадало с именем переменной во внешнем интерфейсе кода.
Откройте модель в качестве примера.
open_system('rtwdemo_configrpinterface')
Создайте объект cm
путем вызывания функции coder.mapping.api.get
. Объектно-ориентированная память настройка генерации кода для элементов данных в модели rtwdemo_configrpinterface
.
cm = coder.mapping.api.get('rtwdemo_configrpinterface');
Сконфигурируйте настройки по умолчанию для выходных портов путем вызывания функции setDataDefault
. Для аргументов задайте эти значения.
Объект, возвращенный coder.mapping.api.get
Outports
для категории по умолчанию
Имя свойства StorageClass
это имеет значение свойства ExportedGlobal
setDataDefault(cm,'Outports','StorageClass','ExportedGlobal')
Проверьте свою настройку по умолчанию для выходных портов. Издайте приказ к getDataDefault
это задает объект, возвращенный coder.mapping.api.get
, категория Outports
, и StorageClass
.
getDataDefault(cm,'Outports','StorageClass') ans = 'ExportedGlobal'
Примените настройку выходного порта по умолчанию для выходного порта 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_configrpinterface.c
, найдите где переменная output
используется в функции точки входа шага.
if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; }
В зависимости от ваших требований генерации кода примите решение из этих классов памяти сконфигурировать генерацию кода для выходных портов корневого уровня.
Требования | Класс памяти |
---|---|
Включите оптимизацию, потенциально генерируя более эффективный код. | Автоматический (Только отдельные отображения) |
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных. | Значение по умолчанию (Значение по умолчанию, сопоставляющее только) |
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте отображение значения по умолчанию для категории элемента данных. | Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения) |
Сгенерируйте определение глобальной переменной и объявление. | ExportedGlobal |
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры (Embedded Coder).
Для отдельного выходного порта используйте свойство класса памяти Identifier сконфигурировать имя для переменной, представляющей выходной порт в сгенерированном коде.
Редактор Отображений кода | coder.mapping.api.CodeMapping