exponenta event banner

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

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

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

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

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

Свойства класса хранения

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

При создании класса хранения с помощью Custom Storage Class Designer пользователь класса хранения может указать дополнительные параметры. См. раздел Разрешить пользователям класса хранения указывать значение свойства.

Класс хранения по умолчанию

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

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

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

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

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

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

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

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

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

ТребованияКласс хранения

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

ParamStruct, SignalStruct

Автомобиль

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

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

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

Дефолт

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

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

При настройке отдельного элемента данных для создания кода используйте Model Default класс хранения для предотвращения исключения оптимизации хранилища для элемента данных. См. раздел Как сгенерированный код хранит внутренний сигнал, состояние и данные параметров. С помощью этого параметра класса хранения элемент данных получает класс хранения по умолчанию, указанный для соответствующей категории данных на вкладке «Значения по умолчанию» редактора сопоставлений кодов. Имя элемента данных в коде совпадает с именем в модели.

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

Если в программе Embedded Coder модель связана со словарем данных, включающим словарь кодеров, который настраивает определения кодов по умолчанию для категорий данных, можно использовать редактор сопоставления кодов для применения значений словаря по умолчанию. На вкладке «Значения по умолчанию для данных» выберите категорию, а затем задайте для класса хранения значение Dictionary Default. Дополнительные сведения о настройке сопоставления кода по умолчанию в словаре кодера см. в разделе Настройка сопоставления кода по умолчанию в общем словаре.

ExportedGlobal

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

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

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

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

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

ImportedExtern, ImportedExternPointer

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

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

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

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

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

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

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

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

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

Битфилд

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

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

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

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

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

Пример использования этого класса хранения см. в разделе Битфилды.

CompilerFlag

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

Если созданный код создается с помощью встроенного кодера, для указания опции компилятора можно использовать параметр конфигурации модели Параметры конфигурации > Создание кода > Пользовательский код > Дополнительные сведения о построении > Определение. См. раздел Область создания кода: Пользовательский код: Дополнительные сведения о построении: Определение.

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

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

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

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

Const, Volatile и 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

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

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

FileScope

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

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

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

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

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

PreserveDimensions

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

GetSet

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

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

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

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

HeaderFile

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

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

Пример использования этого класса хранения см. в разделе Доступ к данным через функции с помощью класса хранения GetSet.

ImportFromFile

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

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

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

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

HeaderFile

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

PreserveDimensions

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

Пример использования этого класса хранения см. в разделе Интеграция кода внешнего приложения с кодом, сгенерированным контроллером PID.

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

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

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

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

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

Создание локальных переменных не позволяет генератору кода удалить переменные из созданного кода.

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

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

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

PreserveDimensions

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

Пример использования этого класса хранения см. в разделе Создание локальных переменных с локализованным классом хранения.

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

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

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

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

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

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

Пример использования этого класса хранения см. в разделе Указание повторного использования буфера с помощью Simulink.Signal.

Структура

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

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

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

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

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

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

ParamStruct, SignalStruct

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

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

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

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

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

Ограничения класса хранения

  • При использовании классов хранения в редакторе сопоставления кода (Embedded Coder) или API сопоставления кода применяются некоторые ограничения. См. раздел Ограничения.

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

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

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

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

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

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

Связанные темы