Определение кода и отображение ограничений и факторов

Ограничения

  • Если элемент данных в модели не называется (для примера сигнал не имеет метки или состояние не имеет имени), вы должны задать идентификатор кода для элемента данных при конфигурировании его для Генерации кода C. Установите идентификатор кода путем определения значения для Identifier свойства класса памяти.

  • Вы не можете использовать отображения кода для настройки MATLAB® переменные, которые используются в качестве параметров блоков. Преобразуйте переменные в Simulink.Parameter объекты в рабочем пространстве модели. Получившиеся объекты данных появляются в редакторе Отображения в качестве параметров модели.

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

  • Чтобы сопоставить эти категории данных с классом памяти, заданным в словаре Embedded Coder, необходимо задать Data Initialization свойства класса памяти равным Dynamic или None:

    • Inport

    • Outport

    • Signals, states, and internal data

    • Shared local data stores

  • Вы не можете сопоставить категории данных External parameters и Global data stores. Для моделей, на которые ссылаются, Вы не можете нанести на карту данные, категории Inports и Outports к классам памяти, которые определены в Словаре Embedded Coder.

  • Вы не можете сопоставить категории данных с:

    • Предопределенные классы памяти на основе структур, Struct и BitField

    • Упакуйте классы памяти типа FlatStructure или Other который вы создаете с помощью Custom Storage Class Designer

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

  • Если модель содержит настраиваемый, нефинитный параметр, например, со значением inf:

    • Генератор кода не применяет указанное отображение параметров по умолчанию. Параметр появляется как поле в структуре данных параметра по умолчанию rtP (см. Структура данных модели реального времени).

    • Вы не можете сопоставить отдельный элемент с классом памяти, заданным в словаре Embedded Coder. Если это так, генератор кода возвращает ошибку. Выберите один из следующих обходных путей:

      • Для индивидуума нефинитного параметра установите класс памяти равным значению, отличному от Auto или Model default, как описано в Configure Parameters for Генерация Кода C.

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

Ограничения соответствия кода по умолчанию

  • Сопоставьте категории параметров с классами хранения, которые заданы со свойством Data Initialization, установленным на Auto, Static, или None.

  • Если модель включает переиспользуемую подсистему (подсистему, которая имеет параметры блоков Function packaging, установленную на Reusable function), которое содержит общее локальное хранилище данных, сопоставьте Shared local data stores категорий с классом памяти, определенным в словаре Embedded Coder для этой модели. Для получения дополнительной информации смотрите Сгенерировать повторный код из подсистем.

  • Для моделей верхнего уровня и моделей, сконфигурированных для использования нескольких экземпляров, сопоставьте категории данных с классами хранения, для которых установлено Storage Type свойство Structured. См. «Генерация входящего кода из верхних моделей» и «Генерация входящего кода из функциональных блоков Simulink».

  • Отображения кода по умолчанию для категорий External parameters и Global data stores должны быть одинаковыми для моделей во всей иерархии моделей-ссылок.

  • Когда модель сконфигурирована для компактной упаковки файлов, вы не можете сопоставить категорию данных с классом памяти, заданной с Data Scope набора свойств to Exported и Header File набора свойств к правилу именования, отличному от $N.h.

  • При оценке настроек класса памяти для переменных управления вариантом генератор кода игнорирует отображения кода по умолчанию. Для получения дополнительной информации см. «Представление подсистемы и исполнительных моделей в Сгенерированном коде».

Неразрешенные определения кода

Если кто-то удаляет определение для класса памяти, шаблона индивидуальной настройки функции или раздела памяти из словаря Embedded Coder Dictionary, связанного с моделью, редактор Code Mappings идентифицирует определение как Unresolved. Например, этот рисунок показывает, что шаблон индивидуальной настройки функции для функций точки входа выполнения был удален из словаря, связанного с моделью.

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

  • Выберите другое определение в Storage Classes, Function Customization Templates или Memory Sections столбце.

  • Если у вас есть Embedded Coder®, заменить или добавить определение в словарь Embedded Coder. Затем обновите отображение.

  • Проконсультируйтесь с кем-либо, например с системным архитектором для вашего проекта, о добавлении определения к словарю Embedded Coder. Затем обновите отображение.

Редактирования моделей и отдельные отображения кода элемента данных

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

В то время как вы можете использовать операции отмены и повторения для редактирования действий над элементами данных моделей, они недоступны при конфигурировании отображений кода. Например, если вы удаляете блок состояний, а затем кликаете Undo, блок снова появляется в холсте модели, а строение кода для состояния снова появляется в отображениях кода. В редакторе Отображения, если вы измените настройку класса памяти для состояния с Auto на Model default, а затем нажмите Undo, класс памяти не возвращается к Auto. В этом случае изменение относится к отображению кода, а не к элементу данных моделей.

Классы памяти и повторяющиеся модели, мультиобразцы и компоненты

Код, который вы генерируете из модели или компонента (ссылочная модель или подсистема), multi-instance code, если он позволяет вашему приложению поддерживать несколько независимые образцы компонента во время выполнения. Например, можно сгенерировать повторный код с мультиобразцами из всей модели путем установки параметра конфигурации модели Code interface packaging равной Reusable function. Общие сведения о моделях и компонентах мультиобразцов см. в разделе «Повторное использование кода».

В некоторых случаях применение классов памяти данных может:

  • Предотвратите генерацию кода мультиобразцов.

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

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

Непосредственно применяемые классы памяти

Когда вы применяете класс памяти непосредственно к элементу данных (см. Строение генерации кода C для элементов интерфейса модели):

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

  • Класс памяти дает только синглтонные данные.

Классы памяти, примененные по умолчанию

Когда вы применяете класс памяти по умолчанию (см. Строение генерации кода C для элементов интерфейса модели):

  • Для этих категорий данных можно сгенерировать только синглтонные данные:

    • Model parameters

    • External parameters

    • Global data stores

    • Shared local data stores

  • Для Internal data можно сгенерировать только данные конкретного экземпляра, что означает, что каждый образец модели или компонента работает с отдельной копией данных. Для этой категории необходимо использовать пример класса памяти SignalStruct, который появляется после подготовки модели к генерации кода с помощью инструмента Quick Start. Также можно создать и использовать собственные структурированные классы памяти с помощью словаря Embedded Coder Dictionary.

Для получения дополнительной информации смотрите Что такое повторный код? и выберите Класс памяти для управления представлением данных в сгенерированном коде.

Копирование отображений кода при преобразовании подсистем в ссылочные Модели

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

См. также

|

Похожие темы