storage class является настройкой генерации кода, что вы обращаетесь к данным, таким как параметры, сигналы и состояния. Во время настройки кода используйте класс памяти, чтобы управлять внешним видом и размещением элемента данных в сгенерированном коде и препятствовать тому, чтобы оптимизация устранила устройство хранения данных для того элемента данных.
Для данных модели можно применить класс памяти непосредственно к элементу данных модели при помощи API отображений редактора или кода Отображений Кода. Или Используя редактор или Используя API, примените класс памяти по умолчанию для категорий данных, и затем замените ту установку, по мере необходимости, для отдельных элементов данных.
Для внешних данных вы применяете класс памяти к объекту данных при помощи Model Explorer или программно при помощи функций, таких как get_param
и set_param
.
Если вы задали класс памяти для элемента или категории элементов, можно установить свойства для того класса памяти, такие как заголовочные файлы, файлы определения и разделы памяти.
Настройки свойства для класса памяти задают, как и где генератор кода представляет данные в сгенерированном коде. Свойства, которые может сконфигурировать пользователь класса памяти, варьируются в зависимости от класса памяти. Для большинства отдельных элементов пользователь может сконфигурировать идентификатор для именования элемента данных в коде. Чтобы идентифицировать свойства, которые пользователь может сконфигурировать для предопределенных классов памяти, смотрите следующую информацию об определенных классах памяти.
Когда вы создаете класс памяти при помощи Custom Storage Class Designer, можно выбрать, может ли пользователь класса памяти задать дополнительные настройки. Смотрите Позволяют Пользователям Класса памяти Задавать Значение свойства.
По умолчанию классом памяти для отдельного элемента данных является Auto
. При помощи этого значения по умолчанию вы принимаете решение иметь выбор класса памяти указателя генератора кода и приложение. В этом случае элемент данных подвергается оптимизации генерации кода, которая может устранить элемент из кода или изменить представление элемента. Если оптимизация не устраняет элемент данных, элемент появляется как поле стандартной структуры данных в сгенерированном коде.
При использовании редактора Отображений Кода или API отображений кода, элемент данных сконфигурирован с классом памяти Auto
это не устраняется оптимизацией, получает настройки генерации кода по умолчанию для соответствующей категории данных. Если вы не задаете настройку кода для категории элементов данных, классом памяти является Default
. Когда категория элемента данных использует этот класс памяти, элементы данных в той категории появляются как поле стандартной структуры данных в сгенерированном коде.
Чтобы препятствовать тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, можно выбрать класс памяти для элемента на основе требований генерации кода. Доступные классы памяти включают встроенные классы памяти, предопределенные классы памяти в Simulink
пакет, и может также включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и вы генерируете код для основанной на ERT цели, можно задать и использовать новый класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры и Создают Классы памяти при помощи Custom Storage Class Designer.
Для Simulink® Coder™, можно выбрать из этих встроенных и предопределенных классов памяти.
Требования | Класс памяти |
---|---|
Включите оптимизацию, потенциально генерируя более эффективный код. | Автоматический (Отдельные элементы данных) |
Для элементов данных, которые не могут быть оптимизированы далеко, представляйте данные как поле стандартной структуры данных. | Значение по умолчанию (Отображение значения по умолчанию) |
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных. | Значение по умолчанию модели (Индивидуум, сопоставляющий) |
Данные о доступе из автономной глобальной переменной. Сгенерированный код содержит объявление переменной и определение. | ExportedGlobal |
Данные о доступе из автономной глобальной переменной. Сгенерированный код содержит объявление переменной. Ваш внешний код предоставляет определение. | ImportedExtern, ImportedExternPointer |
Если у вас есть Embedded Coder®, можно выбрать из этих дополнительных предопределенных классов памяти, доступных в Simulink
пакет.
Требования | Класс памяти |
---|---|
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных. | Значение по умолчанию словаря (Отображение значения по умолчанию) |
Сгенерируйте автономные переменные. | |
Сгенерируйте переменные как поля структуры. | |
Сгенерируйте переменные, которые имеют значение, которое фиксируется во время компиляции кода. | |
Сгенерируйте переменные, к которым вы получаете доступ посредством вызова функции. | GetSet |
Сгенерируйте переменные для данных одно экземпляра и сгенерируйте структуры для данных мультиэкземпляра. | MultiInstance |
Эти классы памяти являются примерами классов памяти, которые можно добавить в Словарь Embedded Coder. Эти примеры заданы и сделаны доступный, когда вы готовите модель к генерации кода при помощи инструмента Quick Start.
Требования | Класс памяти |
---|---|
Сгенерируйте глобальные структуры, которые содержат данные о параметре и данные состояния или сигнала. | ParamStruct, SignalStruct |
Когда вы выбираете этот класс памяти, указатели генератора кода, как представлять данные в сгенерированном коде и можете позволить оптимизации работать с элементом данных, потенциально генерируя более эффективный код.
Auto
установка класса памяти по умолчанию для каждого элемента данных в модели. Элемент данных подвергается оптимизации генерации кода, которая может устранить элемент из кода или изменить представление элемента. Для получения информации об этой оптимизации, такой как те на Configuration Parameters> Code Generation> панель Optimization, смотрите Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре.
Оптимизация не может устранить некоторые данные, такие как большинство состояний блока, из кода. Остающиеся данные получают класс памяти по умолчанию, который вы задаете на вкладке Data Defaults редактора Отображений Кода (см., Конфигурируют Генерацию кода По умолчанию для Данных). Если элемент данных не может быть устранен, имя элемента в коде основано на правилах именования, что вы задаете при помощи параметров конфигурации модели. Смотрите, что Управление форматом Идентификатора — требует Embedded Coder.
На вкладке Data Defaults редактора Отображений Кода, Default
установка класса памяти по умолчанию для каждой категории элемента данных. Если вы оставляете установку класса памяти для категории в этом значении, элементы данных, которые не подвергаются оптимизации генерации кода, появляются как поле стандартной структуры данных. Смотрите Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре.
Когда вы сконфигурируете отдельный элемент данных для генерации кода, используйте Model Default
класс памяти, чтобы препятствовать тому, чтобы оптимизация устранила устройство хранения данных для элемента данных. Смотрите Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре. С этой установкой класса памяти элемент данных получает класс памяти по умолчанию, который вы задаете для соответствующей категории данных на вкладке Data Defaults редактора Отображений Кода. Имя элемента данных в коде совпадает с именем в модели.
В Embedded Coder, если вы соединяете модель со словарем данных, который включает словарь кодера, который конфигурирует определения кода по умолчанию для категорий данных, можно использовать редактор Отображений Кода, чтобы применить значения по умолчанию словаря. На вкладке Data Defaults выберите категорию, затем установите класс памяти на Dictionary Default
. Для получения дополнительной информации о конфигурировании отображения кода по умолчанию в словаре кодера смотрите, Конфигурируют Отображение Кода По умолчанию в Разделяемом Словаре.
Используйте этот встроенный класс памяти, чтобы сгенерировать определение глобальной переменной и объявление. По умолчанию имя переменной является именем элемента данных. Код объявляет переменную в сгенерированном файле
, который можно включать (model
H#include
) в вашем внешнем коде. Генератор кода не оптимизирует эту глобальную переменную от сгенерированного кода.
Когда вы используете этот класс памяти, можно также сконфигурировать это свойство.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
Для примера, который использует этот класс памяти, смотрите Настройку генерации кода C для Элементов Интерфейса модели.
Используйте встроенный класс памяти ImportedExtern
заставить элемент данных в модели представлять глобальную переменную, которую задает ваш внешний код. Сгенерированный алгоритмический код использует переменную, не задавая его.
Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним кодом. Сгенерированный код объявляет переменную в сгенерированном файле model
_private.h
так, чтобы функции точки входа модели могли читать и записать в переменную.
Например, можно применить класс памяти ImportedExtern
к сигнальной линии, состоянию блока или объекту параметра. Для импортированных данных:
Сгенерированный код не инициализирует данные о параметре. Ваш код должен инициализировать импортированные данные о параметре.
Сгенерированные функции инициализации динамически инициализируют некоторые данные состояния и сигнала. В отличие от данных, которые выделяет сгенерированный код, код не инициализирует импортированные данные состояния или сигнала к хранимой сумме нуля. Вместо этого код сразу инициализирует данные к реальному значению, которое вы задаете в Simulink.
Используйте ImportedExternPointer
когда ваш внешний код задает элемент данных и предоставляет указатель для доступа к тем данным. Сгенерированный код читает из и пишет в тот указатель. Сгенерированный код объявляет переменную в сгенерированном файле
и чтения и записи к данным путем разыменования указателя.model
_private.h
Когда вы используете эти классы памяти, можно также сконфигурировать это свойство.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
Используйте этот класс памяти, чтобы сгенерировать структуру, которая хранит булевы данные в именованных битовых полях.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
StructName | Имя структуры для элемента данных в сгенерированном коде. |
Для примера, который использует этот класс памяти, смотрите Битовые поля.
Используйте этот класс памяти, чтобы поддержать условные выражения препроцессора, заданные при помощи флага компилятора или опции.
Если вы создаете сгенерированный код при помощи Embedded Coder, чтобы задать параметр компилятора, можно использовать параметр конфигурации модели Configuration Parameters> Code Generation> Custom Code> Additional build information> Defines. Смотрите Панель Генерации кода: Пользовательский код: Дополнительная информация о Сборке: Задает.
Когда вы используете этот класс памяти, можно также сконфигурировать это свойство.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
Для примера, который использует этот класс памяти, смотрите, Генерируют Условные выражения Препроцессора для Вариантных систем.
Используйте эти классы памяти, чтобы сгенерировать определение глобальной переменной и объявление с const
, volatile
, или const
и volatile
введите спецификаторы.
Когда вы используете эти классы памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
HeaderFile | Исходный заголовочный файл, который содержит объявления для чтения глобальных данных по условию элемент и внешний код. |
DefinitionFile | Исходный файл определения, который содержит определения для чтения глобальных данных по условию элемент и внешний код. |
Owner | Владелец глобальных данных, которые заданы с кодом, сгенерированным для одного из нескольких компонентов то использование те данные. |
PreserveDimensions | Когда параметр конфигурации модели Array layout установлен в |
Для примера, который использует этот класс памяти, смотрите Спецификаторы Типа.
Используйте Define
класс памяти, чтобы сгенерировать макрос (#define
директива), такая как #define myParam 5
.
Используйте ImportedDefine
сгенерировать код, который использует макрос (#define
директива) заданный в заголовочном файле в вашем внешнем коде. Для примера смотрите Макроопределения (#define).
Когда вы используете эти классы памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
HeaderFile | Исходный заголовочный файл, который содержит объявления для глобальных данных, которые считаны по условию элемент и внешний код. |
Для примера, который использует этот класс памяти, смотрите Макроопределения (#define).
Сгенерируйте определение глобальной переменной и объявление к внешнему файлу. Можно задать имя и размещение файлов, которые задают и объявляют переменную. Смотрите Размещение Управления Определений Глобальных данных и Объявлений в Сгенерированных Файлах.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
HeaderFile | Исходный заголовочный файл, куда генератор кода помещает объявления для чтения глобальных данных по условию элемент и внешний код. |
DefinitionFile | Исходный файл определения, куда генератор кода помещает определения для чтения глобальных данных по условию элемент и внешний код. Генератор кода соблюдает эту установку только для моделей одно экземпляра. Установка проигнорирована для допускающих повторное использование моделей мультиэкземпляра, потому что определение данных обработано на родительском уровне. |
Owner | Компонент в иерархии модели, куда генератор кода помещает определение глобальных данных вместо того, чтобы поместить его в главный компонент иерархии. Требует, чтобы вы установили владельца Использования параметра конфигурации модели от объекта данных для размещения определения данных. |
PreserveDimensions | Когда размещение параметра конфигурации Массивов модели установлено в |
Для примера, который использует этот класс памяти, см. Определение, Инициализацию и Объявление Данных о Параметре.
Используйте этот класс памяти, чтобы сгенерировать определение глобальной переменной и объявление, которое имеет static
введите спецификатор. В сгенерированном коде осциллограф переменной ограничивается текущим файлом, который обычно является
.model
C
В иерархии модели - ссылки, если модель, на которую ссылаются, использует объект параметра (такой как Simulink.Parameter
) то, что вы создаете в базовом рабочем пространстве или словаре данных, вы не можете применить FileScope
к объекту. Как обходное решение, переместите объект параметра в рабочее пространство модели модели, на которую ссылаются. Затем можно использовать FileScope
.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
PreserveDimensions | Когда размещение параметра конфигурации Массивов модели установлено в |
Используйте этот класс памяти, чтобы сгенерировать код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа. Ваш внешний код задает данные и предоставляет функциональные определения.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
HeaderFile | Исходный заголовочный файл, который содержит объявления для глобальных данных, которые считаны по условию элемент и внешний код. |
GetFunction | Элемент данных, который появляется в сгенерированном коде как вызов заданного get функция |
SetFunction | Элемент данных, который появляется в сгенерированном коде как вызов заданного set функция |
Для примера, который использует этот класс памяти, см. Доступ к данным Через Функции с Классом памяти GetSet.
Используйте этот класс памяти, чтобы сгенерировать код, который читает из и пишет в глобальную переменную, заданную вашим внешним кодом. ImportFromFile
похоже на ExportToFile
, но сгенерированный код не задает переменную.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
HeaderFile | Исходный заголовочный файл, который содержит объявления для глобальных данных, которые считаны по условию элемент и внешний код. |
PreserveDimensions | Когда размещение параметра конфигурации Массивов модели установлено в |
Для примера, который использует этот класс памяти, смотрите, Интегрируют Код Внешнего приложения с Кодом, Сгенерированным от ПИД-регулятора.
Для сигналов, если это возможно, минимизируют использование глобального устройства хранения данных при помощи локальных переменных.
Если переменная используется в одной функции, переменная локальна для этой функции.
Если переменная используется в одном файле, переменная локальна для того файла.
Если переменная используется больше чем в одной функции или файле, переменная является глобальной переменной.
Генерация локальных переменных препятствует тому, чтобы генератор кода удалил переменные из сгенерированного кода.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
PreserveDimensions | Когда размещение параметра конфигурации Массивов модели установлено в |
Для примера, который использует этот класс памяти, смотрите, Генерируют Локальные переменные с Локализуемым Классом памяти.
Используйте этот класс памяти, чтобы снова использовать ту же переменную для нескольких независимых сигналов в модели. Генератор кода хранит промежуточные вычисления информационного канала (серия связанных блоков) в одной, снова использованной глобальной переменной.
Когда вы используете этот класс памяти, можно также сконфигурировать это свойство.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
Для примера, который использует этот класс памяти, смотрите, Задают Буферное Повторное использование для Сигналов в Пути.
Используйте этот класс памяти, чтобы сгенерировать глобальную структуру с именем, которое можно задать.
Когда вы используете этот класс памяти, можно также сконфигурировать эти свойства.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
StructName | Имя структуры для элемента данных в сгенерированном коде. |
Для примера, который использует этот класс памяти, смотрите, Организуют Данные о Параметре в Структуру при помощи Класса памяти Struct и Структуры Сигналов.
Чтобы сгенерировать неструктурированные переменные для данных одно экземпляра и структуры для данных мультиэкземпляра, используйте этот класс памяти. Когда вы применяете этот класс памяти к элементу данных, Словарь Embedded Coder определяет, является ли это класс хранения единственного экземпляра или класс памяти мультиэкземпляра. Словарь определяет тип класса типом данных и контекстом модели в иерархии модели - ссылки. Можно скопировать этот класс памяти, чтобы создать копию, которую можно отредактировать.
Когда вы применяете этот класс памяти к отдельному элементу данных, можно также сконфигурировать свойство Identifier. Свойство Identifier является строкой идентификатора что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде.
Для примера, который использует этот класс памяти, смотрите Гибкий Класс памяти для Различных Контекстов Иерархии модели.
Используйте эти классы памяти, чтобы сгенерировать глобальные структуры, которые содержат параметр и данные состояния или сигнала, соответственно. В иерархии компонентов (модели, на которые ссылаются, или атомарные подсистемы), можно использовать эти классы памяти, чтобы создать соответствующую иерархию структур. Эти классы памяти появляются в редакторе Отображений Кода только после подготовки модели для генерации кода при помощи инструмента Quick Start.
Эти классы памяти доступны только для данных модели.
Когда вы используете эти классы памяти, можно также сконфигурировать это свойство.
Свойство | Описание |
---|---|
Identifier | Строка идентификатора, что использование генератора кода, чтобы назвать элемент данных в сгенерированном коде. |
Когда вы используете классы памяти в редакторе Отображений Кода (Embedded Coder) или API отображений кода, некоторые ограничения применяются. Смотрите Ограничения.
Объекты данных не могут использовать класс памяти Embedded Coder и тип данных многословный.
Для классов памяти Embedded Coder в моделях, которые используют модели, на которые ссылаются:
Если вы применяете сгруппированный класс памяти, такой как Struct
или Bitfield
, к нескольким элементам данных необходимо установить свойство Data scope класса памяти на Imported
и необходимо предоставить объявление данных во внешнем заголовочном файле. Сгруппированные классы памяти используют одну переменную в сгенерированном коде, чтобы представлять несколько объектов данных.
Если объект параметра существует в базовом рабочем пространстве или словаре данных, и модель, на которую ссылаются, использует объект, вы не можете применить класс памяти FileScope
. Чтобы применить этот класс памяти к объекту параметра, переместите объект в рабочее пространство модели модели, на которую ссылаются.
Вы не можете применить класс памяти FileScope
к элементам данных, используемым интерфейсом обмена данными (C API, режим external mode или ASAP2) или логгирование MAT-файла. Ограниченные по объему файлом данные не внешне доступны.
Вы не можете применить класс памяти FileScope
к данным, которые используются в нескольких файлах.