storage class является настройкой генерации кода, что вы обращаетесь к данным модели, таким как сигналы, параметры блоков и состояния. Используйте классы памяти, чтобы управлять внешним видом элементов данных в сгенерированном коде.
Таблица показывает встроенные классы памяти, что можно выбрать. Эти классы памяти идут с Simulink® Coder™.
Имя класса памяти | Описание |
---|---|
Auto |
Оптимизация не может устранить некоторые данные, такие как большинство состояний блока, из кода. Эти остающиеся данные получают класс памяти по умолчанию, который вы задаете с Кодом, Сопоставляющим Редактор (см., Конфигурируют Генерацию кода По умолчанию для Данных — требует Embedded Coder®). Если вы оставляете установку класса памяти в Коде, Сопоставляющем Редактор значения по умолчанию, Если оптимизация не может устранить элемент данных, имя элемента в коде основано на правилах именования, что вы задаете с параметрами конфигурации модели (см., что Управление форматом Идентификатора — требует Embedded Coder). Используйте этот класс памяти, чтобы позволить оптимизации работать с элементом данных, потенциально генерируя более эффективный код. |
Model default | Элемент данных получает соответствующий класс памяти по умолчанию, который вы задаете с Кодом, Сопоставляющим Редактор. Имя элемента данных в коде совпадает с именем в модели. Используйте этот класс памяти, чтобы препятствовать тому, чтобы оптимизация устранила устройство хранения данных для элемента данных (см. Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре (Simulink Coder)). |
ExportedGlobal | Сгенерируйте определение глобальной переменной и объявление. Имя переменной является именем элемента данных. Код объявляет переменную в сгенерированном файле |
ImportedExtern | Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним кодом. Сгенерированный код объявляет переменную в сгенерированном файле Используйте этот класс памяти, чтобы заставить элемент данных в модели представлять глобальную переменную, которую задает ваш внешний код. Сгенерированный алгоритмический код использует переменную, не задавая его. |
ImportedExternPointer | Сгенерируйте код, который читает из и пишет в глобальную переменную указателя, заданную вашим внешним кодом. Сгенерированный код объявляет переменную в сгенерированном файле Используйте этот класс памяти, когда ваш внешний код задаст элемент данных и предоставит указатель для доступа к тем данным. |
Если у вас есть Embedded Coder, можно выбрать дополнительные встроенные классы памяти, показанные в следующей таблице.
Имя класса памяти | Описание | Используйте в данных состояния или сигнала | Используйте в данных о параметре |
---|---|---|---|
| Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях. Для примера смотрите Битовые поля. Вы не можете использовать этот класс памяти в Коде, Сопоставляющем Редактор. | Да | Да |
CompilerFlag | Условные выражения препроцессора поддержек заданы через флаг компилятора или опцию. Смотрите Генерируют Условные выражения Препроцессора для Вариантных систем. Если вы создаете сгенерированный код при помощи Embedded Coder (вы очищаете Configuration Parameters> Generate code only), чтобы задать параметр компилятора, можно использовать параметр конфигурации модели Configuration Parameters> Code Generation> Custom Code> Additional build information> Defines. Смотрите Панель Генерации кода: Пользовательский код: Дополнительная информация о Сборке: Задает (Simulink Coder). | Нет | Да |
| Сгенерируйте определение глобальной переменной и объявление с | Нет | Да |
| Сгенерируйте определение глобальной переменной и объявление с | Нет | Да |
| Сгенерируйте макрос ( | Нет | Да |
| Сгенерируйте определение глобальной переменной и объявление. Можно задать имена файлов, которые задают и объявляют переменную. | Да | Да |
FileScope | Сгенерируйте определение глобальной переменной и объявление с В иерархии модели - ссылки, если модель, на которую ссылаются, использует объект параметра (такой как | Да | Да |
GetSet | Сгенерируйте код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа. Ваш внешний код задает данные и предоставляет функциональные определения. Для примеров см. Доступ к данным Через Функции с Классом памяти GetSet. | Да | Да |
ImportedDefine | Сгенерируйте код, который использует макрос (#define директива) заданный в заголовочном файле в вашем внешнем коде. Для примера смотрите Макроопределения (#define). | Нет | Да |
| Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним кодом. Подобно | Да | Да |
| Сгенерируйте более эффективный код, который хранит промежуточные вычисления информационного канала (серия связанных блоков) в одной, снова использованной глобальной переменной. Для примера смотрите, Задают Буферное Повторное использование при помощи Simulink. Объекты сигнала. Можно применить этот класс памяти только к | Да | Нет |
| Сгенерируйте глобальную структуру, имя которой можно задать. Для примеров смотрите, Организуют Данные о Параметре в Структуру при помощи Класса памяти Struct и Структуры Сигналов. Вы не можете использовать этот класс памяти в Коде, Сопоставляющем Редактор. | Да | Да |
| Сгенерируйте определение глобальной переменной и объявление с | Да | Да |
Localizable | Для сигналов, если это возможно, генерируют переменные, которые локальны для функций, а не в глобальном устройстве хранения данных. Генерация локальных переменных препятствует тому, чтобы генератор кода реализовал оптимизацию, которая удаляет переменные из сгенерированного кода. Для примера смотрите, Генерируют Локальные переменные с Локализуемым Классом памяти. | Да (сигналы не состояния) | Нет |
Эти классы памяти являются примерами классов памяти, которые можно добавить в Словарь Embedded Coder. Эти примеры заданы и сделаны доступный, когда вы готовите модель к генерации кода с инструментом Quick Start.
Имя класса памяти | Описание | Используйте в данных состояния или сигнала | Используйте в данных о параметре |
---|---|---|---|
ParamStruct | Сгенерируйте глобальные структуры, которые содержат данные о параметре. В иерархии компонентов (модели, на которые ссылаются, или атомарные подсистемы), можно использовать этот класс памяти в качестве примера, чтобы создать соответствующую иерархию структур параметра. Этот класс памяти появляется только в Коде, Сопоставляющем Редактор для категории данных Model parameters после подготовки модели для генерации кода с инструментом Quick Start. | Нет | Да |
SignalStruct | Сгенерируйте глобальные структуры, которые содержат данные состояния или сигнала. В иерархии компонентов (модели, на которые ссылаются, или атомарные подсистемы), можно использовать этот класс памяти в качестве примера, чтобы создать соответствующую иерархию структур состояния и сигнала. Этот класс памяти появляется только в Коде, Сопоставляющем Редактор после подготовки модели для генерации кода с инструментом Quick Start. | Да | Нет |
Когда вы генерируете повторно используемый, код мультиэкземпляра, ограничения и ограничения применяются, если вы хотите использовать классы памяти. Смотрите Классы памяти Использования в Повторно используемом, Моделях Мультиэкземпляра и Компонентах (Simulink Coder).
После того, как вы применяете некоторые классы памяти, такие как ExportToFile
, можно задать дополнительные настройки, такие как объявление имена файлов определения и (заголовок). В Коде, Сопоставляющем Редактор, чтобы получить доступ к этим дополнительным настройкам, вы используете Property Inspector.
С другими классами памяти вы не можете задать дополнительные настройки.
Эти встроенные классы памяти Simulink Coder не позволяют вам задавать дополнительные настройки:
ExportedGlobal
ImportedExtern
ImportedExternPointer
Встроенные классы памяти Embedded Coder обычно позволяют вам задавать имена файлов определения и объявление.
Для ExportToFile
класс памяти, установка файла определения соблюдается только для моделей одно экземпляра. Установка проигнорирована для допускающих повторное использование моделей мультиэкземпляра, потому что определение данных обработано на родительском уровне.
Когда вы создаете класс памяти с Custom Storage Class Designer, можно выбрать, может ли пользователь класса памяти задать дополнительные настройки. Смотрите Позволяют Пользователям Класса памяти Задавать Значение свойства.
#include
Синтаксис для заголовочных файлов, которые объявляют данные (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 в моделях, которые используют модели, на которые ссылаются:
Если вы применяете сгруппированный класс памяти к нескольким элементам данных, свойство Data scope класса памяти должно быть установлено в Imported
и необходимо предоставить объявление данных во внешнем заголовочном файле. Сгруппированные классы памяти используют одну переменную в сгенерированном коде, чтобы представлять несколько объектов данных. Например, классы памяти BitField
и Struct
сгруппированные классы памяти.
Если объект параметра существует в базовом рабочем пространстве или словаре данных, и модель, на которую ссылаются, использует объект, вы не можете применить класс памяти FileScope
. Как обходное решение, переместите объект в рабочее пространство модели модели, на которую ссылаются. Затем можно использовать FileScope
.
Вы не можете применить класс памяти FileScope
к элементам данных, используемым интерфейсом обмена данными (C API, режим external mode или ASAP2) или логгирование MAT-файла. Ограниченные по объему файлом данные не внешне доступны.