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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сконфигурируйте имена функции для отдельных функций шага с помощью редактора Code Mappings или отображений кода API function 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. Можно настроить следующие аспекты функции шага:

  • Имя функции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. Для строки функции step, в столбце Function Preview, щелкните гиперссылку прототипа, чтобы открыть диалоговое окно Configure C Step Function Interface.

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

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

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

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

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

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

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

Декларация выделена в коде:

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

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

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

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

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

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

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

Функции шага модели на основе скорости могут использовать аргументы для передачи данных. Можно настроить следующие параметры аргументов:

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

  • Типы квалификаторов

  • Имена

  • Порядок

Пример

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

2. В диалоговом окне Configure C Step Function Interface выберите Configure arguments for Step function prototype.

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

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 type qualifier к ссылочной модели.

В данном примере не вносите никаких изменений в квалификатор типа C.

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

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

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

В данном примере переместите Out1 в первое положение. Переместите Out 2 в третье положение.

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

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

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

  • Проверьте свои изменения в файловой rtwdemo_fcnprotoctrl.c.Чтобы просмотреть определение функции, выберите имя функции 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)

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

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

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

  • Частота дискретизации блоков 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. Откройте отображение аргументов, выбрав Настроить аргументы для прототипа функции Step.

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

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

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

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

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

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

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

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

  • Измените существующий интерфейс функции.

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

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

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

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

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

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

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

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

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

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

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

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

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

Ограничения индивидуальной настройки интерфейса функции 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 не является интерфейсом по умолчанию, значение игнорируется для параметр конфигурации <reservedrangesplaceholder0> модели. Для получения дополнительной информации смотрите Передайте скалярные корневые входы фиксированного размера по значению для генерации кода.

См. также

|

Похожие темы