Сконфигурируйте Корневой Уровень блоки Outport для генерации кода C

Чтобы использовать код, который вы генерируете из модели, вы вызываете сгенерированные функции точки входа. Среда вызова и сгенерированные функции обмениваются входными и выходными данными, например, как глобальные переменные или аргументы функции. Корневой уровень блоки Outport (выходные порты) составляет выходные данные интерфейса. Чтобы интегрировать и развернуть сгенерированный код в объемные приложения, можно настроить, как генератор кода производит интерфейсный код, включая то, как выходные данные объявлены и обработаны. Индивидуальные настройки могут:

  • Минимизируйте модификации, которые вы делаете к существующему коду.

  • Сгенерируйте устойчивые интерфейсы, которые не изменяются или минимально изменяются, когда вы вносите изменения в свою модель.

  • Сгенерируйте код, который обменивается данными более эффективно (например, при помощи указателей и аргументов передачи ссылкой для нескалярных данных).

Для генерации кода примеры показывают, как настроить интерфейс выходного порта для модели rtwdemo_configinterface. Можно сконфигурировать отображения кода при помощи Code Mappings Editor или API отображений кода (coder.mapping.api.CodeMapping).

Выберите Customization Options for Outport Interface

По умолчанию выходные порты корневого уровня в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием model_ExtY. На основе ваших требований интерфейса кода решите, настроить ли генерацию данных о выходном порте. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление выходных портов в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:

  • Настроить ли настройку по умолчанию

    Если модель включает значительное количество (например, больше чем 10) выходных портов корневого уровня, более эффективно сконфигурировать выходные порты с настройкой по умолчанию и переопределением та установка для особых случаев. Если модель включает несколько выходных портов, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование выходных портов индивидуально.

  • Как объявить и обработать данные о выходном порте в сгенерированном интерфейсе

    • Как разделяют глобальные переменные

    • Записать выходные данные в глобальные переменные, заданные во внешнем коде

    • Для выходных портов модели, на которые ссылаются, как глобальные переменные (void-void)

    • Как вызывает к функциям доступа. Требует Embedded Coder®

    • Как аргументы функции точки входа. Требует 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.

  1. Открытая модель rtwdemo_configinterface в качестве примера. Сохраните копию модели к перезаписываемому местоположению.

    Simulink model to use for learning how to configure outports for code generation.

  2. Откройте приложение Embedded Coder.

  3. Во вкладке C Code выберите Code Interface> Default Code Mappings.

  4. В редакторе Отображений Кода, под Inports and Outports, избранная категория Outports. Установите класс памяти по умолчанию на ExportToFile.

  5. В Property Inspector, Заголовочном файле набора к exOutSys.h и файл определения к exOutSys.c.

    Code Mappings editor with Data Defaults tab selected, Inports and Outports tree node expanded, and storage class for Outports set to ExportToFile. Property Inspector with HeaderFile property set to exOutSys.h and DefinitionFile property set to exOutSys.c.

  6. Сохраните модель.

Сконфигурируйте настройки генерации кода для отдельных выходных портов Корневого Уровня

Можно сконфигурировать отдельные выходные порты корневого уровня для генерации кода. Например, если модель имеет два выходных порта корневого уровня, которые имеют требования генерации уникального кода, конфигурируют выходные порты индивидуально. Или, если вы конфигурируете настройки по умолчанию для выходных портов, конфигурируете отдельные выходные порты, чтобы использовать настройки по умолчанию или уникальные настройки.

Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для выходных портов индивидуально:

  • Использование несколько выходных портов, которые имеют уникальные требования.

  • Использование немного выходных портов.

  • Имеет настройку по умолчанию для выходных портов, и необходимо заменить настройку для некоторых определенных выходных портов.

В этом примере показано, как использовать редактор Отображений Кода, чтобы применить настройку генерации кода по умолчанию для выходных портов в модели rtwdemo_configinterface. В предыдущем примере вы устанавливаете класс памяти по умолчанию для выходных портов к ExportToFile. Требование задает тот выходной порт Out1 запишите выходные данные в глобальную переменную, объявленную и заданную в сгенерированном заголовке и файлах определения, доступных для внешнего кода.

Пример также показывает, как сконфигурировать идентификатор, который генератор кода использует для именования выходного порта в сгенерированном коде. Можно задать идентификаторы генерации кода, например, для интегрирования, не изменяя проект модели.

  1. Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для Выходных портов Корневого Уровня.

  2. В редакторе Отображений Кода кликните по вкладке Outports. Редактор перечисляет имена блоков Выходного порта и элементов шины, которые находятся в модели. Если порт решает к объекту сигнала, решимость сигнализировать, что объектный значок появляется справа от имени элемента. Класс памяти для выходного порта в модели в качестве примера установлен в Auto, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти ExportToFile.

    • Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default.

    • Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того выходного порта.

  3. Сконфигурируйте генератор кода, чтобы применить установку класса памяти по умолчанию на выходной порт Out1. Выберите строку для выходного порта. Установите класс памяти на Model default: ExportToFile.

    Code Mappings editor with Outports tab selected, outport Out1 selected, and storage class being set to Model default: ExportToFile.

    Класс памяти для выбранного выходного порта превращается в Model default: ExportToFile.

  4. Сконфигурируйте идентификатор кода для выходного порта так, чтобы интерфейсное имя аргумента в сгенерированном коде совпадало с интерфейсным именем, используемым внешним кодом. В редакторе Отображений Кода выберите строку для выходного порта. В Property Inspector, набор свойство Identifier к output.

  5. Сохраните модель.

  6. Сгенерируйте и просмотрите код. Например, в файле rtwdemo_configinterface.c, найдите где переменная output используется в функции точки входа шага.

    if (mode) {
        output = (real_T)mp_K1 * dout_Table1;
      } else {
        output = dstate_X;
      }
    

Сконфигурируйте настройки генерации кода для выходных портов Корневого Уровня программно

Чтобы автоматизировать настройку выходных портов корневого уровня для генерации кода, используйте интерфейс программирования для отображений кода. Например, при создании библиотек пользовательского блока или части тестовой среды приложения, используйте интерфейс программирования, чтобы автоматизировать настройку данных.

В этом примере показано, как использовать интерфейс программирования, чтобы сконфигурировать настройки по умолчанию для выходных портов корневого уровня для модели rtwdemo_configinterface.

Сконфигурируйте код идентификатор для выходного порта так, чтобы имя глобальной переменной в сгенерированном коде совпадало с именем переменной во внешнем интерфейсе кода.

  1. Откройте модель в качестве примера.

    open_system('rtwdemo_configinterface')
    
  2. Создайте объект cm путем вызывания функции coder.mapping.api.get. Объектно-ориентированная память настройка генерации кода для элементов данных и функций в модели rtwdemo_configinterface.

    cm = coder.mapping.api.get('rtwdemo_configinterface');
  3. Сконфигурируйте настройки по умолчанию для выходных портов путем вызывания функции 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')
  4. Проверьте свою настройку по умолчанию для выходных портов. Издайте три приказа к 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'
    
  5. Примените настройку выходного порта по умолчанию для выходного порта Out1.

    По умолчанию Simulink устанавливает класс памяти для отдельных выходных портов к Auto. Когда классом памяти является Auto, генератор кода:

    • Определяет, устранить ли данные из сгенерированного кода в целях оптимизации.

    • При сохранении данных, определяет, как эффективно представлять данные в сгенерированном коде, учитывая параметры конфигурации по умолчанию.

    Чтобы управлять настройкой для выходного порта, вызовите функцию setOutport.

    Издайте приказ к setOutport это задает:

    • Объект, возвращенный coder.mapping.api.get

    • Имя блока выходного порта Out1

    • Класс памяти по умолчанию ранее установлен для выходного порта при помощи свойства StorageClass и значение свойства Model default

    • Свойство Identifier и значение свойства output

    setOutport(cm,'Out1','StorageClass','Model default','Identifier','output');
    
  6. Проверьте свои изменения конфигурации путем вызывания функции getOutport. Задайте объект, возвращенный coder.mapping.api.get, имя блока выходного порта и свойство StorageClass или Identifier.

    getOutport(cm,'Out1','StorageClass')
    
    ans =
    
        'Model default'
    
    getOutport(cm,'Out1','Identifier')
    
    ans =
    
        'output'
    
  7. Сохраните модель.

  8. Сгенерируйте и просмотрите код. Например, в файле rtwdemo_configinterface.c, найдите где переменная output используется в функции точки входа шага.

    if (mode) {
        output = (real_T)mp_K1 * dout_Table1;
      } else {
        output = dstate_X;
      }
    

Выберите Storage Class и Storage Class Properties for Root-Level Outports

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

ТребованияКласс памяти
Включите оптимизацию, потенциально генерируя более эффективный код.Автоматический (Только отдельные отображения)
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных.Значение по умолчанию (Значение по умолчанию, сопоставляющее только)
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте отображение значения по умолчанию для категории элемента данных.Значение по умолчанию модели (Только отдельные отображения), 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

Смотрите также

|

Похожие темы