Выберите Storage Class for Controlling Data Representation in Generated Code

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

Таблица показывает встроенные классы памяти, что можно выбрать. Эти классы памяти идут с Simulink® Coder™.

Имя класса памятиОписание
Auto

Auto установка класса памяти по умолчанию для каждого элемента данных в модели. Элемент данных подвергается оптимизации генерации кода, которая может устранить элемент из кода или изменить представление элемента. Для получения информации об этой оптимизации, такой как те на Configuration Parameters> Code Generation> панель Optimization, смотрите Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре.

Оптимизация не может устранить некоторые данные, такие как большинство состояний блока, из кода. Эти остающиеся данные получают класс памяти по умолчанию, который вы задаете с Кодом, Сопоставляющим Редактор (см., Конфигурируют Генерацию кода По умолчанию для Данных (Embedded Coder) — требует Embedded Coder®). Если вы оставляете установку класса памяти в Коде, Сопоставляющем Редактор значения по умолчанию, Default, элемент данных появляется как поле стандартной структуры данных (см. Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре).

Если оптимизация не может устранить элемент данных, имя элемента в коде основано на правилах именования, что вы задаете с параметрами конфигурации модели (см., что Управление форматом Идентификатора (Embedded Coder) — требует Embedded Coder).

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

Model default

Элемент данных получает соответствующий класс памяти по умолчанию, который вы задаете с Кодом, Сопоставляющим Редактор. Имя элемента данных в коде совпадает с именем в модели.

Используйте этот класс памяти, чтобы препятствовать тому, чтобы оптимизация устранила устройство хранения данных для элемента данных (см. Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре).

ExportedGlobal

Сгенерируйте определение глобальной переменной и объявление. Имя переменной является именем элемента данных. Код объявляет переменную в сгенерированном файле modelH, который можно включать (#include) в вашем внешнем коде.

ImportedExtern

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

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

ImportedExternPointer

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

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

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

Имя класса памятиОписаниеИспользуйте в данных состояния или сигналаИспользуйте в данных о параметре

BitField

Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях. Для примера смотрите Битовые поля (Embedded Coder).

Вы не можете использовать этот класс памяти в Коде, Сопоставляющем Редактор.

Да

Да

CompilerFlag

Условные выражения препроцессора поддержек заданы через флаг компилятора или опцию. Смотрите Генерируют Условные выражения Препроцессора для Вариантных систем (Embedded Coder).

Если вы создаете сгенерированный код при помощи Embedded Coder (вы очищаете Configuration Parameters> Generate code only), чтобы задать параметр компилятора, можно использовать параметр конфигурации модели Configuration Parameters> Code Generation> Custom Code> Additional build information> Defines. Смотрите Панель Генерации кода: Пользовательский код: Дополнительная информация о Сборке: Задает.

Нет

Да

Const

Сгенерируйте определение глобальной переменной и объявление с const введите спецификатор.

Нет

Да

ConstVolatile

Сгенерируйте определение глобальной переменной и объявление с const и volatile введите спецификаторы. Для примера смотрите Спецификаторы Типа (Embedded Coder).

Нет

Да

Define

Сгенерируйте макрос (#define директива), такая как #define myParam 5. Для примера смотрите Макроопределения (#define) (Embedded Coder).

Нет

Да

ExportToFile

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

Да

Да

FileScope

Сгенерируйте определение глобальной переменной и объявление с static введите спецификатор. В сгенерированном коде осциллограф переменной ограничивается текущим файлом, который обычно является modelC.

В иерархии модели - ссылки, если модель, на которую ссылаются, использует объект параметра (такой как Simulink.Parameter) то, что вы создаете в базовом рабочем пространстве или словаре данных, вы не можете применить FileScope к объекту. Как обходное решение, переместите объект параметра в рабочее пространство модели модели, на которую ссылаются. Затем можно использовать FileScope.

Да

Да

GetSetСгенерируйте код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа. Ваш внешний код задает данные и предоставляет функциональные определения. Для примеров см. Доступ к данным Через Функции с Классом памяти GetSet (Embedded Coder).

Да

Да

ImportedDefineСгенерируйте код, который использует макрос (#define директива) заданный в заголовочном файле в вашем внешнем коде. Для примера смотрите Макроопределения (#define) (Embedded Coder).

Нет

Да

ImportFromFile

Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним кодом. Подобно ExportToFile, но сгенерированный код не задает переменную.

Да

Да

Reusable

Сгенерируйте более эффективный код, который хранит промежуточные вычисления информационного канала (серия связанных блоков) в одной, снова использованной глобальной переменной. Для примера смотрите, Задают Буферное Повторное использование при помощи Simulink. Объекты сигнала (Embedded Coder).

Можно применить этот класс памяти только к Simulink.Signal объект, который представляет несколько сигнальных линий в модели.

Да

Нет

Struct

Сгенерируйте глобальную структуру, имя которой можно задать. Для примеров смотрите, Организуют Данные о Параметре в Структуру при помощи Класса памяти Struct (Embedded Coder) и Структуры Сигналов (Embedded Coder).

Вы не можете использовать этот класс памяти в Коде, Сопоставляющем Редактор.

Да

Да

Volatile

Сгенерируйте определение глобальной переменной и объявление с volatile введите спецификатор.

Да

Да

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

Эти классы памяти являются примерами классов памяти, которые можно добавить в Словарь Embedded Coder. Эти примеры заданы и сделаны доступный, когда вы готовите модель к генерации кода с инструментом Quick Start.

Имя класса памятиОписаниеИспользуйте в данных состояния или сигналаИспользуйте в данных о параметре
ParamStruct

Сгенерируйте глобальные структуры, которые содержат данные о параметре. В иерархии компонентов (модели, на которые ссылаются, или атомарные подсистемы), можно использовать этот класс памяти в качестве примера, чтобы создать соответствующую иерархию структур параметра. Этот класс памяти появляется только в Коде, Сопоставляющем Редактор для категории данных Model parameters после подготовки модели для генерации кода с инструментом Quick Start.

НетДа
SignalStruct

Сгенерируйте глобальные структуры, которые содержат данные состояния или сигнала. В иерархии компонентов (модели, на которые ссылаются, или атомарные подсистемы), можно использовать этот класс памяти в качестве примера, чтобы создать соответствующую иерархию структур состояния и сигнала. Этот класс памяти появляется только в Коде, Сопоставляющем Редактор после подготовки модели для генерации кода с инструментом Quick Start.

ДаНет

Когда вы генерируете повторно используемый, код мультиэкземпляра, ограничения и ограничения применяются, если вы хотите использовать классы памяти. Смотрите Классы памяти Использования в Повторно используемом, Моделях Мультиэкземпляра и Компонентах.

Указание имени файла и другие атрибуты данных с классом памяти (Embedded Coder)

После того, как вы применяете некоторые классы памяти, такие как ExportToFile, можно задать дополнительные настройки, такие как объявление имена файлов определения и (заголовок). В Коде, Сопоставляющем Редактор, чтобы получить доступ к этим дополнительным настройкам, вы используете Property Inspector.

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

  • Эти встроенные классы памяти Simulink Coder не позволяют вам задавать дополнительные настройки:

    • ExportedGlobal

    • ImportedExtern

    • ImportedExternPointer

  • Встроенные классы памяти Embedded Coder обычно позволяют вам задавать имена файлов определения и объявление.

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

  • Когда вы создаете класс памяти с Custom Storage Class Designer, можно выбрать, может ли пользователь класса памяти задать дополнительные настройки. Смотрите Позволяют Пользователям Класса памяти Задавать Значение свойства (Embedded Coder).

Задайте значение по умолчанию #include Синтаксис для заголовочных файлов, которые объявляют данные (Embedded Coder)

Чтобы управлять размещением файла элемента данных, такого как сигнальная линия или состояние блока, в сгенерированном коде, можно применить класс памяти к элементу данных (см., Применяют Встроенные и Индивидуально настраиваемые Классы памяти к Элементам данных (Embedded Coder)). Вы затем используете пользовательский атрибут Header file, чтобы задать сгенерированный или внешний заголовочный файл, который содержит объявление данных.

Чтобы уменьшать усилие по обслуживанию и ввод данных, когда вы задаете Header file, можно не использовать разделители (" или <>) и используйте только имя файла. Можно затем управлять разделителями по умолчанию, которые сгенерированный код использует в соответствующем #include директивы. Чтобы использовать угловые скобки по умолчанию, установите Configuration Parameters> Code Generation> Code Placement> #include file delimiters к #include <header.h>.

Ограничения класса памяти

  • Когда вы используете классы памяти в редакторе Отображений Кода (Embedded Coder), некоторые ограничения применяются. Смотрите Ограничения (Embedded Coder).

  • Объекты данных не могут использовать класс памяти Embedded Coder и тип данных многословный.

  • Для классов памяти Embedded Coder в моделях, которые используют модели, на которые ссылаются:

    • Если вы применяете сгруппированный класс памяти к нескольким элементам данных, свойство Data scope класса памяти должно быть установлено в Imported и необходимо предоставить объявление данных во внешнем заголовочном файле. Сгруппированные классы памяти используют одну переменную в сгенерированном коде, чтобы представлять несколько объектов данных. Например, классы памяти BitField и Struct сгруппированные классы памяти.

    • Если объект параметра существует в базовом рабочем пространстве или словаре данных, и модель, на которую ссылаются, использует объект, вы не можете применить класс памяти FileScope. Как обходное решение, переместите объект в рабочее пространство модели модели, на которую ссылаются. Затем можно использовать FileScope.

  • Вы не можете применить класс памяти FileScope к элементам данных, используемым интерфейсом обмена данными (C API, режим external mode или ASAP2) или логгирование MAT-файла. Ограниченные по объему файлом данные не внешне доступны.

Похожие темы