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

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

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

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

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

Для генерации кода примеры показывают, как настроить интерфейс выходного порта для модели rtwdemo_configrpinterface. Можно сконфигурировать отображения кода при помощи 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_configrpinterface :

  • Запишите данные для выходного порта корневого уровня Out1 к внешнему заголовочному файлу. Данные записаны с Out1 выход кода, сгенерированного для блока switch.

  • Переменную, представляющую выходной порт в сгенерированном коде, нужно назвать output.

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

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

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

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

Модель в качестве примера rtwdemo_configrpinterface включает один выходной порт корневого уровня. В этом примере показано, как использовать Code Mappings editor, чтобы сконфигурировать настройки по умолчанию для выходных портов корневого уровня. Укажите что переменные code generator declare и define, чтобы представлять корневые выходные порты в сгенерированном внешнем заголовке и файлах определения.

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

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

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

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

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

    Code Mappings editor with Data Defaults tab selected, Outports and Outports tree node expanded, and storage class for Outports set to ExportedGlobal.

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

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

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

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

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

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

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

В этом примере показано, как использовать редактор Отображений Кода, чтобы применить настройку генерации кода по умолчанию для выходных портов в модели rtwdemo_configrpinterface. В предыдущем примере вы устанавливаете класс памяти по умолчанию для выходных портов к ExportedGlobal.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    cm = coder.mapping.api.get('rtwdemo_configrpinterface');
  3. Сконфигурируйте настройки по умолчанию для выходных портов путем вызывания функции setDataDefault. Для аргументов задайте эти значения.

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

    • Outports для категории по умолчанию

    • Имя свойства StorageClass это имеет значение свойства ExportedGlobal

    setDataDefault(cm,'Outports','StorageClass','ExportedGlobal')
  4. Проверьте свою настройку по умолчанию для выходных портов. Издайте приказ к getDataDefault это задает объект, возвращенный coder.mapping.api.get, категория Outports, и StorageClass.

    getDataDefault(cm,'Outports','StorageClass')
    
    ans =
    
        'ExportedGlobal'
    
  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_configrpinterface.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 (Только отдельные отображения)
Сгенерируйте определение глобальной переменной и объявление.ExportedGlobal
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом.ImportedExtern, ImportedExternPointer

Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры (Embedded Coder).

Для отдельного выходного порта используйте свойство класса памяти Identifier сконфигурировать имя для переменной, представляющей выходной порт в сгенерированном коде.

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

|

Похожие темы