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

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

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

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

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

ParamStruct, SignalStruct

'auto'

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

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

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

Значение по умолчанию

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

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

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

Значение по умолчанию словаря

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

ExportedGlobal

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

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

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

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

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

ImportedExtern, ImportedExternPointer

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

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

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

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

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

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

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

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

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

Битовое поле

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

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

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

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

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

Для примера, который использует этот класс памяти, смотрите Битовые поля.

CompilerFlag

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

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

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

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

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

Для примера, который использует этот класс памяти, смотрите, Генерируют Условные выражения Препроцессора для Вариантных систем.

Const, энергозависимый, и ConstVolatile

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

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

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

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

HeaderFile

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

DefinitionFile

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

Owner

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

PreserveDimensions

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

Для примера, который использует этот класс памяти, смотрите Спецификаторы Типа.

Задайте, ImportedDefine

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

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

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

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

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

HeaderFile

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

Для примера, который использует этот класс памяти, смотрите Макроопределения (#define).

ExportToFile

Сгенерируйте определение глобальной переменной и объявление к внешнему файлу. Можно задать имя и размещение файлов, которые задают и объявляют переменную. Смотрите Размещение Управления Определений Глобальных данных и Объявлений в Сгенерированных Файлах.

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

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

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

HeaderFile

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

DefinitionFile

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

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

Owner

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

PreserveDimensions

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

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

FileScope

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

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

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

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

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

PreserveDimensions

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

GetSet

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

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

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

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

HeaderFile

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

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

Для примера, который использует этот класс памяти, см. Доступ к данным Через Функции с Классом памяти GetSet.

ImportFromFile

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

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

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

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

HeaderFile

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

PreserveDimensions

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

Для примера, который использует этот класс памяти, смотрите, Интегрируют Код Внешнего приложения с Кодом, Сгенерированным от ПИД-регулятора.

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

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

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

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

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

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

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

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

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

PreserveDimensions

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

Для примера, который использует этот класс памяти, смотрите, Генерируют Локальные переменные с Локализуемым Классом памяти.

Допускающий повторное использование

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

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

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

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

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

Для примера, который использует этот класс памяти, смотрите, Задают Буферное Повторное использование при помощи Объектов Simulink.Signal.

Struct ()

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

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

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

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

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

Для примера, который использует этот класс памяти, смотрите, Организуют Данные о Параметре в Структуру при помощи Класса памяти Struct и Структуры Сигналов.

ParamStruct, SignalStruct

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

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

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

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

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

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

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

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

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

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

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

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

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

Похожие темы