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

Ограничения

  • Если элемент данных в модели без имени (например, сигнал не имеет никакой метки, или состояние не имеет никакого имени), необходимо задать идентификатор кода для элемента данных при конфигурировании его для генерации кода 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, как описано в Конфигурируют Параметры для генерации кода C.

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

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

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

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

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

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

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

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

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

Если кто-то удаляет определение для класса памяти, функциональный шаблон настройки или раздел memory из Словаря Embedded Coder, сопоставленного с моделью, редактор Отображений Кода идентифицирует определение как 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.

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

Скопируйте отображения кода при преобразовании подсистем в модели, на которые ссылаются,

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

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

|

Похожие темы