Выберите класс памяти для контроля представления данных в сгенерированном коде

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

Для данных моделей можно применить класс памяти непосредственно к элементу данных моделей с помощью редактора Code Mappings или API отображений кода. Используя редактор или API, примените класс памяти по умолчанию для категорий данных, а затем переопределите этот параметр, при необходимости, для отдельных элементов данных.

Для внешних данных вы применяете класс памяти к объекту данных с помощью Model Explorer или программно с помощью таких функций, как get_param и set_param.

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

Свойства класса памяти

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

При создании класса памяти с помощью Custom Storage Class Designer можно выбрать, может ли пользователь класса памяти задать дополнительные параметры настройки. См. «Разрешить пользователям класса памяти задавать значение свойства» (Embedded Coder).

Класс памяти по умолчанию

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

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

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

Чтобы предотвратить устранение оптимизации хранилища для элемента данных, можно выбрать класс памяти для элемента на основе требований генерации кода. Доступные классы памяти включают встроенные классы памяти, предопределенные классы памяти в Simulink пакет, и может также включать другие специфичные для проекта классы памяти, определенные в словаре Embedded Coder. Если у вас есть особые требования, которые не удовлетворяются перечисленными классами памяти, и вы генерируете код для целевого объекта на основе ERT, можно определить и использовать новый класс памяти. См. «Определение классов памяти, разделов памяти и шаблонов функций для программной архитектуры (Embedded Coder) и Создание классов памяти при помощи Custom Storage Class Designer (Embedded Coder)».

Для Simulink® Coder™ можно выбрать из этих встроенных и предопределенных классов памяти.

ТребованияКласс памяти
Включите оптимизацию, потенциально создавая более эффективный код.Авто (Отдельные элементы данных)
Для элементов данных, которые не могут быть оптимизированы, представьте данные как поле стандартной структуры данных.По умолчанию (по умолчанию отображение)
Предотвратите устранение оптимизации системы хранения данных для элемента данных.Модель по умолчанию (индивидуальное отображение)
Доступ к данным из неструктурированной глобальной переменной. Сгенерированный код содержит объявление и определение переменной.ExportedGlobal
Доступ к данным из неструктурированной глобальной переменной. Сгенерированный код содержит объявление переменной. Ваш внешний код предоставляет определение.ImportedExtern, ImportedExternPointer

Если у вас есть Embedded Coder®, можно выбрать из этих дополнительных предопределенных классов памяти, доступных в Simulink пакет.

ТребованияКласс памяти
Предотвратите устранение оптимизации системы хранения данных для элемента данных.Дефолт словаря (Отображение по умолчанию)
Сгенерируйте неструктурированные переменные.
Сгенерируйте переменные как поля структуры.
Сгенерируйте переменные, которые имеют значение, которое фиксируется во время компиляции кода.
Сгенерируйте переменные, к которым вы получаете доступ через вызов функции.GetSet

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

ТребованияКласс памяти

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

ParamStruct, SignalStruct

Автомобиль

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

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

Оптимизация не может исключить некоторые данные, такие как большинство состояний блока, из кода. Остальные данные получают класс памяти по умолчанию, заданный на вкладке Data Defaults редактора Отображения (см. «Настройка генерации кода по умолчанию для данных (Embedded Coder)»). Если элемент данных не может быть удален, имя элемента в коде основано на правилах именования, которые вы задаете при помощи параметров конфигурации модели. См. Identifier Format Control (Embedded Coder) - требует Embedded Coder.

Дефолт

На вкладке Data Defaults редактора Отображения Default является настройкой класса памяти по умолчанию для каждой категории элемента данных. Если вы оставляете настройку класса памяти для категории по этому значению, элементы данных, которые не подлежат оптимизации генерации кода, появляются как поле стандартной структуры данных. Смотрите, как сгенерированный код хранит внутренний сигнал, состояние и данные параметра.

Модель по умолчанию

Когда вы конфигурируете отдельный элемент данных для генерации кода, используйте Model Default класс памяти, чтобы предотвратить устранение оптимизацией системы хранения данных для элемента данных. Смотрите, как сгенерированный код хранит внутренний сигнал, состояние и данные параметра. С помощью этой настройки класса памяти элемент данных получает класс памяти по умолчанию, заданный для соответствующей категории данных на вкладке Data Defaults редактора Отображения. Имя элемента данных в коде совпадает с именем в модели.

Словарь по умолчанию

В Embedded Coder, если вы связываете модель со словарем данных, который включает словарь кодера, который конфигурирует определения кода по умолчанию для категорий данных, можно использовать редактор Отображения, чтобы применить значения по умолчанию словаря. На вкладке Data Defaults выберите категорию, а затем установите класс памяти равным Dictionary Default. Дополнительные сведения о настройке отображения кода по умолчанию в словаре кодера см. в разделе Настройка отображении кода по умолчанию в общем словаре (Embedded Coder).

ExportedGlobal

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

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

СвойствоОписание
Identifier

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

Для примера, который использует этот класс памяти, смотрите Строение Генерации кода C для Элементов Интерфейса Модели.

ImportedExtern, ImportedExternPointer

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

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

Для примера можно применить класс памяти ImportedExtern в сигнальную линию, состояние блока или объект параметра. Для импортированных данных:

  • Сгенерированный код не инициализирует данные параметра. Ваш код должен инициализировать импортированные данные параметра.

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

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

При использовании этих классов памяти можно также настроить это свойство.

СвойствоОписание
Identifier

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

Битфилд

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

StructNameИмя структуры для элемента данных в сгенерированном коде.

Для примера, который использует этот класс памяти, см. Bitfields (Embedded Coder).

CompilerFlag

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

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

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

СвойствоОписание
Identifier

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

Для примера, который использует этот класс памяти, см. «Генерация предварительных условий для вариантных систем (Embedded Coder)».

Const, Volatile и ConstVolatile

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

При использовании этих классов памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

HeaderFile

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

DefinitionFile

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

Owner

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

PreserveDimensions

Когда параметр конфигурации модели Array layout установлен в Row-major, флаг, который указывает, сохранять ли размерности элемента данных, который представлен в сгенерированном коде как многомерный массив.

Пример, в котором используется этот класс памяти, см. в разделе «Типы классификаторов (Embedded Coder)».

Задайте, ИмпортируйтеЗадайте

Используйте Define класс памяти для генерации макроса (#define директива), например #define myParam 5.

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

При использовании этих классов памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

HeaderFile

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

Пример использования этого класса хранения см. в разделе Определения макросов (# define) (Embedded Coder).

ExportToFile

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

HeaderFile

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

DefinitionFile

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

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

Owner

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

PreserveDimensions

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

Для примера, который использует этот класс памяти, смотрите Определение, Инициализация и Объявление Данных Параметра (Embedded Coder).

FileScope

Используйте этот класс памяти для генерации глобального определения переменной и объявления, которое имеет static type qualifier. В сгенерированном коде возможности переменной ограничены текущим файлом, который обычно model.c.

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

PreserveDimensions

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

GetSet

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

HeaderFile

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

GetFunctionЭлемент данных, который появляется в сгенерированном коде как вызов к заданному get функция
SetFunctionЭлемент данных, который появляется в сгенерированном коде как вызов к заданному set функция

Пример, который использует этот класс памяти, см. в разделе Доступ к данным через функции с класс памяти (Embedded Coder).

ImportFromFile

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

HeaderFile

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

PreserveDimensions

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

Для примера, который использует этот класс памяти, смотрите Интегрирация кода внешнего приложения с кодом, сгенерированным из ПИД-регулятора (Embedded Coder).

Локализуемый

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

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

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

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

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

PreserveDimensions

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

Пример, использующий этот класс памяти, см. в разделе Генерация локальных переменных с локализуемым классом памяти (Embedded Coder).

Повторно используемый

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

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

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

СвойствоОписание
Identifier

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

Для примера, который использует этот класс памяти, смотрите Задать повторное использование буфера при помощи Simulink .Signal Objects (Embedded Coder).

Struct

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

При использовании этого класса памяти можно также сконфигурировать эти свойства.

СвойствоОписание
Identifier

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

StructNameИмя структуры для элемента данных в сгенерированном коде.

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

ParamStruct, SignalStruct

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

Эти классы памяти доступны только для данных, принадлежащих модели.

При использовании этих классов памяти можно также настроить это свойство.

СвойствоОписание
Identifier

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

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

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

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

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

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

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

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

  • Невозможно применить класс памяти FileScope к данным, которые используются в нескольких файлах.

Похожие темы