Сконфигурируйте генерацию кода C для функций точки входа модели

Что такое функция точки входа?

Точка входа является местоположением в коде, где передача программного управления (выполнение) происходит. Основная функция (main()) точка входа к программе C/C++ и называется, когда приложение начинает выполняться. Вызовы других функций, например, от main функционируйте, обеспечьте точки входа, чтобы функционировать код. Программное управление передается вызванной функции. Функциональный код выполняется, и по окончании, возвращает управление main или другая вызывающая функция.

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

Раздел Code Interface Report отчета генерации кода перечисляет функции точки входа, которые генератор кода производит для модели. Для получения дополнительной информации смотрите, Анализируют Интерфейс Сгенерированного кода.

Типы сгенерированных функций точки входа

Генератор кода производит функции точки входа для этих типов функций модели.

Тип функции моделиИсходное имя моделиСгенерированное имя функции по умолчаниюОписание
Экспортируемая функция (требует Embedded Coder®),ExportedFunction:slIdentifier, где slIdentifier имя блока Inport вызова функции в моделиfunction-call-inport-block-name или signal-label (если задано)Для экспортированной модели функции, экспортируемой функции для подсистемы.
Инициализируйте функциюInitializemodel_initialize

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

Функция разделаPartition:slIdentifier, где slIdentifier раздел, который был создан явным образом из блока в модели и показан в Редакторе Расписания Simulink® (например, P1)model_stepn, где n однозначно определяет функцию, сгенерированную в течение одного из периодов расчета моделиДля раздела модели, выхода и кода обновления. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию).
Функция обновления разделаPartitionUpdate:slIdentifier, где slIdentifier раздел, который был создан явным образом из блока в модели и показан в Редакторе Расписания Simulink® (например, P1)model_outputn и model_updaten, где n однозначно определяет функцию, сгенерированную в течение одного из периодов расчета моделиДля раздела модели, выхода и кода обновления в отдельных функциях. Параметр конфигурации модели Single output/update function очищен.
Периодическая многозадачная функцияPeriodic:slIdentifier, где slIdentifier аннотация, которая соответствует периоду шага расчета для периодического или непрерывного уровня многозадачной модели (например, D1)model_stepn, где n однозначно определяет функцию, сгенерированную в течение одного из периодов расчета моделиДля блоков в основанной на уровне модели, сконфигурированной для многозадачности, выхода и кода обновления. Генератор кода производит функцию в течение каждого периода расчета. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию).
Периодическая многозадачная функция обновленияPeriodicUpdate:slIdentifier, где slIdentifier аннотация, которая соответствует периоду шага расчета для периодического или непрерывного уровня многозадачной модели (например, D1)model_outputn и model_updaten, где n однозначно определяет функцию, сгенерированную в течение одного из периодов расчета моделиДля блоков в основанной на уровне модели, сконфигурированной для многозадачности, выхода и кода обновления в отдельных функциях. Генератор кода производит функции выхода и обновления в течение каждого периода расчета. Параметр конфигурации модели Single output/update function очищен.
Периодическая однозадачная функцияPeriodicmodel_stepДля блоков в основанной на уровне модели, сконфигурированной для однозадачности, выхода и кода обновления. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию).
Периодическая однозадачная функция обновленияPeriodicUpdatemodel_output и model_updateДля блоков в основанной на уровне модели, сконфигурированной для однозадачности, выхода и кода обновления в отдельных функциях. Параметр конфигурации модели Single output/update function очищен.
Функция сбросаReset:slIdentifier, где slIdentifier имя функции сброса в моделиmodel_reset-function-name

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

Функция SimulinkSimulink Function:slIdentifier, где slIdentifier имя блока Simulink Function в моделиfunction-name для глобального блока Simulink Function или model_function-name для ограниченного по объему блока Simulink FunctionДля экспортированной модели функции, экспортируемой функции для блока Simulink Function.
Оконечная функцияTerminatemodel_terminate

Код для того, чтобы выключить систему. Для основанных на ERT моделей можно подавить генерацию этой функции путем очистки параметра конфигурации модели Terminate function required (набор по умолчанию).

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

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

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

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

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

Настройки по умолчанию для Одно Экземпляра C функции точки входа

По умолчанию, для GRT - и основанные на ERT системные конечные файлы, генератор кода производит одно экземпляр C функции точки входа. Сгенерированный код:

  • Создает функцию выполнения без аргументов (void-void).

  • Выделяет память статически (во время компиляции) для структур данных модели.

Настройки параметра конфигурации модели по умолчанию для конфигурирования кода функции точки входа одно экземпляра:

Сгенерируйте допускающий повторное использование, мультиэкземпляр C функции точки входа

Можно сконфигурировать генератор кода, чтобы произвести допускающие повторное использование функции точки входа в C или для GRT - или для основанного на ERT системного конечного файла. Однако функциональные интерфейсы, которые генератор кода производит по умолчанию, варьируются. Предположение, что параметр конфигурации модели Language установлен в C и Code interface packaging установлен в Reusable function, генератор кода производит этот код функции точки входа для каждого системного сценария конечного файла.

Системный конечный файлИнтерфейс
Основанный на GRT
  • Допускающий повторное использование, мультиэкземпляр C функции точки входа, которые повторно используемы.

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

  • Выделяет память динамически во времени выполнения для данных экземпляра модели. Выделяет память путем вызывания функции, такой как malloc.

Основанный на ERT
  • Допускающий повторное использование, мультиэкземпляр C функции точки входа, которые повторно используемы.

  • Передает значение каждого блока Inport корневого уровня модели и блока Outport к функции выполнения в качестве отдельного аргумента.

  • Выделяет память статически для структур данных модели.

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

  • Используя динамическое выделение памяти, чтобы инициализировать структуры данных модели. Выберите Use dynamic memory allocation for model initialization.

  • При упаковке значений корневого уровня модели Inport блокируется в структуру, упаковке значений блоков Выходного порта корневого уровня во вторую структуру и передаче структур функции выполнения в качестве аргументов ссылкой. Установите Pass root-level I/O as на Structure reference.

  • Упаковка значений корневого уровня модели блоки Inport и Выход блокируются в структуру данных модели реального времени и передача той структуры к функции выполнения в качестве аргумента ссылкой. Установите Pass root-level I/O as на Part of model data structure.

Сгенерируйте допускающий повторное использование, мультиэкземпляр функции точки входа C++

Интерфейс класса C++ инкапсулирует данные модели как свойства класса и функции точки входа как методы класса. Тот интерфейс доступен для использования с основанными на ERT системными конечными файлами. Чтобы использовать интерфейс, установите Language на C++ и набор Code interface packaging к C++ class. Вы можете:

  • Предварительный просмотр и настраивает интерфейс класса C++ путем нажатия на Configure C++ Class Interface. Индивидуальная настройка означает, что можно сгенерировать код для интеграции с внешним кодом и проверить, что код выполняет кодирование стандартов.

  • Сконфигурируйте видимость наследования классов путем определения, сгенерировать ли структуру параметров блоков как общедоступный, частный, или защищенный элемент данных. Установите Parameter visibility на public, private, или protected.

  • Сгенерируйте код интерфейса C++ для параметров блока модели, которые удовлетворяют требования скорости или приспособляемости выполнения кода. Код может быть не встроен или встроенные методы доступа. Установите Parameter access на Method или Inlined method.

  • Сгенерируйте код интерфейса C++ для корневого уровня модели Inport и библиотека Outport, которая встречает скорости выполнения кода, приспособляемости данных или данным упаковочные требования. Код может быть одним из этих типов методов доступа.

    Для типа метода доступаУстановите Внешний доступ к вводу-выводу К
    НевстроенныйMethod
    ВстроенныйInlined method
    Невстроенный основанный на структуреStructure-based method
    Встроенный структурированный - базирующийсяInlined structure-based method
  • Сконфигурируйте видимость наследования классов путем определения, сгенерировать ли структуру ввода-вывода корневого уровня как общедоступный, частный, или защищенный элемент данных. Установите External I/O visibility на public, private, или protected.

Выберите подход для конфигурирования сгенерированных интерфейсов функции C

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

НастройкаБольше информации
Правила именования значения по умолчанию для категорий функций (инициализируют/отключают, выполнение и совместно использованная утилита) через модельСконфигурируйте генерацию кода по умолчанию для функций
Назовите для отдельных функций точки входа (замените правило именования значения по умолчанию),Сконфигурируйте имена для функций точки входа индивидуума C
Интерфейс ступенчатой функции (имя функции, возвращаемое значение, и спецификаторы типа аргумента C, имена и порядок) для точки входа шага базовой ставки функционирует в интерактивном режимеСконфигурируйте имя и аргументы для отдельных ступенчатых функций
Функциональные интерфейсы (имя функции, возвращаемое значение, и спецификаторы типа аргумента C, имена и порядок) для Simulink Функциональная и Функциональная Вызывающая сторона блокируются в интерактивном режимеСконфигурируйте интерфейсы функции точки входа для Simulink функциональные и функциональные блоки вызывающей стороны

Можно использовать программное обеспечение в цикле (SIL), тестирующий, чтобы проверить код, сгенерированный для индивидуально настраиваемых функций точки входа. Создайте блок SIL при помощи своего сгенерированного кода. Затем интегрируйте блок SIL в модель, чтобы проверить, что сгенерированный код обеспечивает тот же результат как исходная или невиртуальная подсистема модели. Для получения дополнительной информации смотрите, Выбирают SIL или PIL Approach.

Сконфигурируйте настройки генерации кода по умолчанию для функциональной категории

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

Генератор кода производит функции точки входа для этих категорий функций модели:

Функциональная категорияОписание
Инициализировать/ОтключитьФункции, которые инициализируют и выключают систему
ВыполнениеФункции, которые инициируют выполнение и сброс
Разделяемая утилитаРазделяемый код служебной функции

Сконфигурируйте отображения кода по умолчанию для функций при помощи API-функции отображений Редактора или кода Отображений Кода setFunctionDefault. Используя эти интерфейсы, можно сопоставить функциональную категорию с функциональным шаблоном настройки, заданным в Словаре Embedded Coder модели.

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

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

Для примера того, как сконфигурировать настройки по умолчанию для функциональных категорий, смотрите, Конфигурируют генерацию кода C По умолчанию для Категорий Элементов данных и Функций.

Сконфигурируйте имена для функций точки входа индивидуума C

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

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

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

  • Использование немного функций.

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

Сконфигурируйте имена функций для отдельных ступенчатых функций при помощи API-функции отображений редактора или кода Отображений Кода setFunction. Используя эти интерфейсы, можно сопоставить функцию с функциональным шаблоном настройки, который задан в Словаре Embedded Coder модели, и задайте имя функции.

В этом примере показано, как поменять имя initialize функция для модели rtwdemo_fcnprotoctrl.

  1. Откройте и сохраните копию модели rtwdemo_fcnprotoctrl в перезаписываемом месте.

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

  3. На вкладке C Code выберите Code Interface> Individual Element Code Mappings.

  4. В редакторе Отображений Кода, вкладке Functions, изменяют название функции при помощи одного из этих методов:

    • В столбце Function Name введите имя для функции.

    • В столбце Function Preview кликните по гиперссылке прототипа функции, чтобы открыть диалоговое окно настройки. В поле C Initialize Function Name введите имя функции. Нажмите Apply, чтобы проверить изменение в поле C function prototype или нажать OK, чтобы выйти из диалогового окна и просмотреть имя функции в столбце Function Preview редактора Отображений Кода.

    В данном примере поменяйте имя initialize функционируйте к fcnprotoctrl_init.

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

  6. Сгенерируйте код.

  7. Проверьте изменения в сгенерированном коде. В представлении Code найдите экземпляры имени функции fcnprotoctrl_init. Имя функции появляется в сгенерированных файлах rtwdemo_fcnprotoctrl.h и rtwdemo_fcnprotoctrl.c.

    • В rtwdemo_fcnprotoctrl.h:

      extern void fcnprotoctrl_init(void);
      
    • В rtwdemo_fcnprotoctrl.c:

      void fcnprotoctrl_init(void)
      {
        ...
      }

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

Для вашего сгенерированного кода C, чтобы придерживаться стандартов кода и инструкций или более легко интегрировать код с внешним кодом, можно сконфигурировать имя и аргументы отдельных ступенчатых функций, сгенерированных для периодических функций Simulink. Можно настроить эти аспекты ступенчатой функции:

  • FunctionName

  • Имена аргумента

  • Порядок аргументов

  • Возвращаемое значение и спецификаторы данных об аргументе

  • Буферизация оптимизации для аргументов

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

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

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

Сконфигурируйте отображения кода для отдельных ступенчатых функций при помощи API-функции отображений редактора или кода Отображений Кода setFunction. Используя эти интерфейсы, можно сопоставить функцию с функциональным шаблоном настройки, который задан в Словаре Embedded Coder модели, и полностью настройте прототип ступенчатой функции.

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

Откройте диалоговое окно настройки

1. Откройте и сохраните копию модели rtwdemo_fcnprotoctrl к перезаписываемому местоположению.

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

3. На вкладке C Code выберите Code Interface> Individual Element Code Mappings.

4. В редакторе Отображений Кода кликните по вкладке Functions.

5. Для строки ступенчатой функции, в Функциональном столбце Предварительного просмотра, кликают по прототипной гиперссылке, чтобы открыть диалоговое окно Configure C Step Function Interface.

В диалоговом окне Configure C Step Function Interface поле прототипа функции C отображает предварительный просмотр изменений, которые вы вносите в прототипа функции.

Для моделей, сконфигурированных, чтобы сгенерировать код мультиэкземпляра, смотрите, Генерируют Повторно используемый Код от Топ-моделей.

Настройте имя функции

1. В диалоговом окне Configure C Step Function Interface, набор C Имя Ступенчатой функции к fcnprotoctrl_run. Функциональный предварительный просмотр обновляется, чтобы отразить новое имя функции.

2. Нажмите Apply, закройте диалоговое окно и сохраните модель.

3. Сгенерируйте код и проверьте смену имени.

  • Кликните по вкладке Code. В списке файлов Представления кода выберите файл rtwdemo_fcnprotoctrl.h. В Поле поиска проверьте, что список элементов кода включает имя функции fcnprotoctrl_run. Чтобы просмотреть объявление, выберите имя функции.

Объявление подсвечено в коде:

  • Проверьте смену имени в файле rtwdemo_fcnprotoctrl.c. Чтобы просмотреть исходный код (определение), в Поле поиска, выбирают fcnprotoctrl_run.

Для большего количества примеров смотрите, Конфигурируют Имена для Функций Точки входа Индивидуума C.

Настройте аргументы функции

Сконфигурируйте структуры глобальных данных

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

Сконфигурировать модель, чтобы иметь void-void ступенчатая функция, откройте диалоговое окно Configure C Step Function Interface и очистите аргументы Configure для прототипного флажка Ступенчатой функции. Проверьте изменение в предварительном просмотре прототипа функции C.

Сконфигурируйте аргументы

Основанные на уровне ступенчатые функции модели могут использовать аргументы, чтобы передать данные. Можно настроить эти настройки аргумента:

  • Возвращаемое значение

  • Введите спецификаторы

  • Имена

  • Порядок

Пример

1. Откройте диалоговое окно Configure C Step Function Interface. В редакторе Отображений Кода кликните по вкладке Functions. Затем кликните по функциональному предварительному просмотру для ступенчатой функции.

2. В диалоговом окне Configure C Step Function Interface выберите аргументы Configure для прототипа Ступенчатой функции.

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

4. Настройте возвращаемое значение ступенчатой функции. Установите возвращаемый аргумент C на любой void или один из выходных аргументов. В данном примере выберите void.

5. Для каждого аргумента задайте Спецификатор Типа C.

Спецификаторы типа:

  • Value: Значение, например, arg

  • Const: Значение с const спецификатор, например, const arg

  • Pointer to const: Значение с const спецификатор и ссылаемый указателем, например, const *arg

  • Pointer: Ссылка указателем, например, *arg

  • Const pointer to const: Значение с const спецификатор, ссылка указателем, и самим указателем, например, const *const arg

Модели, которые включают модель, на которую ссылаются,

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

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

В данном примере не внесите изменения в спецификатор типа C.

6. Настройте имена аргумента путем редактирования значений в столбце Имени Идентификатора C.

В данном примере поменяйте имена аргументов путем удаления символов нижнего подчеркивания, например, измените arg_In1 в argIn1.

7. Настройте порядок аргументов путем перетаскивания строк таблицы к новым позициям.

В данном примере переместите Out1 в первое положение. Съезжайте 2 к третьей позиции.

8. Подтвердите, примените свои изменения, закройте диалоговое окно и сохраните модель.

9. Сгенерируйте код и проверьте изменения в Представлении кода.

  • Проверьте свои изменения в файле rtwdemo_fcnprotoctrl.h путем проверки, что Поле поиска включает функциональный fcnprotoctrl_run.To просматривают объявление функции, выбирают имя функции.

  • Проверьте свои изменения в файле rtwdemo_fcnprotoctrl.c.To просматривают определение для функции, выбирают имя функции fcnprotoctrl_run.

Прототип, отличающийся от предварительного просмотра

В диалоговом окне Configure C Step Function Interface предварительный просмотр прототипа функции для модели, на которую ссылаются, может показать меньше аргументов, чем прототип функции в сгенерированном коде.

Например, рассмотрите модель под названием mdlref_counter с импортом (arg_input), выходной порт (arg_output), и насыщение блокируется с пределами, которые имеют имена аргумента параметра рабочей области lower_saturation_limit и upper_saturation_limit. Диалоговое окно Configure C Step Function Interface показывает предварительный просмотр прототипа функции как:

mdlref_counter_custom(arg_input, arg_output)

В сгенерированном коде прототип включает аргументы параметра:

mdlref_counter_custom(real_T arg_input, real_T arg_output, real_T 
  rtp_lower_saturation_limit, real_T rtp_upper_saturation_limit)

Оптимизируйте буферизацию для аргументов

Можно оптимизировать буферизацию, требуемую для аргументов I/O в ступенчатой функции для модели. Если вы придерживаетесь этих требований при конфигурировании импорта и пары выходного порта, генератор кода объединяет соответствующие аргументы и снова использует связанный буфер.

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

  • Частота дискретизации блоков Inport и Outport должна совпасть с базовой ставкой модели.

  • Условно выполняемая подсистема не может управлять блоком Outport.

  • Один, невиртуальный блок выход должен управлять блоком Outport. Например, блок Mux, который объединяет несколько буферов, не может управлять блоком Outport.

  • В диалоговом окне Configure C Step Function Interface необходимо сконфигурировать Inport и Outport с тем же спецификатором типа C и именем идентификатора.

В этом примере показано, как объединить аргументы для портов In3 и Out2 например, модель rtwdemo_fcnprotoctrl.

1. Откройте диалоговое окно Configure C Step Function Interface для модели rtwdemo_fcnprotoctrl.

2. Откройте отображение для аргументов путем выбора аргументов Configure для прототипа Ступенчатой функции.

3. Для портов In3 и Out2, установите Спецификатор Типа C to Pointer и имя идентификатора C к sharedArg.

4. Проверьте, что предварительный просмотр показывает объединенный аргумент для argIn3 и argOut2.

5. Подтвердите, примените свои изменения, закройте диалоговое окно и сохраните модель.

6. Сгенерируйте и просмотрите код. В Представлении кода ищите fcnprotoctrl_run функционируйте и проверяйте функциональный интерфейс. В данном примере разделяемый аргумент появляется в коде чтения для блока Inport и коде записи для блока Outport.

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

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

Типичное использование этих функций включает:

  • Создайте функциональный интерфейс.

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

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

  • Сбросьте функциональный интерфейс модели к настройке функции ERT по умолчанию.

Для примера то, как сконфигурировать настройки генерации кода для точки входа C, функционирует программно, смотрите, Конфигурируют программно Данные По умолчанию и Функциональную Генерацию кода. Тот пример показывает, как сконфигурировать настройки по умолчанию для функциональных категорий и отдельных функций.

Как взаимодействовать через интерфейс со сгенерированными функциями точки входа

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

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

  3. Добавьте #include оператор, который включает сгенерированный файл rtwtypes.h. Этот файл предоставляет определения типа, #define операторы и перечисления.

  4. Инициализируйте целевые структуры данных и оборудование, такие как ADCs или DACs.

  5. Если применимо инициализируйте данные для каждого экземпляра допускающей повторное использование модели.

  6. Если применимо запишите входные данные в сгенерированные переменные, которые представляют блоки модели Inport.

  7. Вызовите сгенерированные функции точки входа или настройте использование rt_OneStep функция.

  8. Если применимо считайте данные из сгенерированных переменных, которые представляют блоки модели Outport.

Для получения дополнительной информации смотрите, Развертывают Сгенерированные Программы Независимого исполняемого файла В Целевой компьютер.

C функция соединяют интерфейсом с ограничениями индивидуальной настройки

Эти ограничения применяются к индивидуальным настройкам за сгенерированные интерфейсы функции C:

  • Необходимо выбрать параметр конфигурации модели Single output/update function.

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

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

  • Если вы принимаете решение настроить функциональный интерфейс, необходимо обеспечить собственный main программа. Вы не можете сконфигурировать функциональный интерфейс со статическим rt_main.c тот MathWorks® обеспечивает. Определение функциональной интерфейсной настройки кроме значения по умолчанию создает несоответствие между сгенерированным кодом и статическим rt_main.c по умолчанию.

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

  • Генератор кода удаляет структуру данных для корневых выходных портов модели кроме тех случаев, когда вы включаете логгирование MAT-файла или если шаг расчета одного или нескольких выходных портов не является основной базовой ставкой (включая постоянный уровень).

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

  • Если у вас есть Stateflow® для диаграммы Stateflow, которая использует корневое значение импорта модели, или это вызывает подсистему, которая использует корневое значение импорта модели, сделайте одно из следующих, чтобы сгенерировать код:

    • Снимите флажок Execute (enter) Chart At Initialization в диаграмме Stateflow.

    • Сделайте функцию Stateflow функцией одноразового использования.

    • Вставьте блок Simulink® Signal Conversion сразу после корневого импорта. В диалоговом окне параметров блоков Signal Conversion выберите Exclude this block from 'Block reduction' optimization.

  • Если корневое значение импорта модели соединяется с блоком преобразования Simscape™, вставьте блок Simulink Signal Conversion между корневым импортом и блок преобразования Simscape. В диалоговом окне параметров блоков Signal Conversion выберите Exclude this block from 'Block reduction' optimization.

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

  • Если интерфейс функции C не является значением по умолчанию, значение проигнорировано для параметра конфигурации модели Pass fixed-size scalar root inputs by value for code generation. Для получения дополнительной информации смотрите скалярные корневые входные параметры фиксированного размера Передачи значением для генерации кода.

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

|

Похожие темы