Выберите 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

Сгенерируйте определение глобальной переменной и объявление. Имя переменной является именем элемента данных. Код объявляет переменную в сгенерированном файле model.h, который можно включать (#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. В сгенерированном коде осциллограф переменной ограничивается текущим файлом, который обычно является model.c.

В иерархии модели - ссылки, если модель, на которую ссылаются, использует объект параметра (такой как 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

Сгенерируйте глобальные структуры, которые содержат данные о параметре. В иерархии компонентов (модели, на которые ссылаются, или атомарные подсистемы), можно использовать этот класс памяти в качестве примера, чтобы создать соответствующую иерархию структур параметра. Этот класс памяти появляется только в Коде, Сопоставляющем Редактор для категории данных Local 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 и тип данных многословный.

  • Блок Fcn не поддерживает параметры с классом памяти Embedded Coder в генерации кода.

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

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

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

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

Похожие темы