storage class является настройкой генерации кода, что вы обращаетесь к элементу данных (сигнал, параметры блоков или состояние) в модели. Когда вы непосредственно применяете его к элементу данных, классу памяти:
Заставляет элемент данных появляться в сгенерированном коде как глобальный символ, обычно глобальная переменная.
Предотвращает оптимизацию, такую как Default parameter behavior и Signal storage reuse от устранения элемента данных от сгенерированного кода.
С Embedded Coder® можно сконфигурировать формат, в котором сгенерированный код хранит или в противном случае задает элемент данных. Например, можно применить спецификаторы типа хранения const
или volatile
или сконфигурируйте элемент данных параметра, чтобы появиться как макрос (#define
).
Непосредственно примените классы памяти к отдельным элементам данных к:
Настройки параметров и сигналы монитора и состояния во время выполнения.
Сконфигурируйте размещение данных в памяти через разделы памяти.
Сгенерируйте код, который обменивается данными (например, глобальные переменные) с вашим внешним кодом.
Для получения информации о применении классов памяти к категориям данных по умолчанию, при помощи Кода, Сопоставляющего Редактор, видят, Конфигурируют Генерацию кода По умолчанию для Данных (Embedded Coder).
В этом примере показано, как применить классы памяти к сигналу, состоянию блока и параметрам блоков в модели.
Исследуйте модель в качестве примера
Откройте модель rtwdemo_roll
в качестве примера.
open_system('rtwdemo_roll')
Перейдите в BasicRollMode
подсистема.
open_system('rtwdemo_roll/BasicRollMode')
Подсистема содержит блок Integrator, который обеспечивает часть данных состояния.
От корневого уровня модели перейдите в RollAngleReference
подсистема.
open_system('rtwdemo_roll/RollAngleReference')
Подсистема содержит блок Constant, пометил UpThr.
В этом примере вы конфигурируете и выходной сигнал состояния блока Integrator и параметр Постоянного значения блока Constant, чтобы появиться в сгенерированном коде как отдельные глобальные переменные.
Примените классы памяти
Перейдите к корневому уровню модели.
Откройте Приложение Simulink Coder. Когда запрошено, изменение системный конечный файл к grt.tlc
.
Кликните по вкладке Model Data Editor.
В Model Data Editor кликните по кнопке Change scope. Это расширяется
списки данных, чтобы включать элементы данных в подсистемы.
Выберите вкладку Signals.
Установите представление Change выпадающий список на Code
.
В поле содержимого Фильтра введите integrator
.
Опционально, используйте столбец Имени, чтобы задать имя для выходного сигнала блока Integrator, такого как mySignal
.
Используйте столбец Класса памяти, чтобы применить класс памяти ExportedGlobal
.
Выберите вкладку Штатов.
Опционально, используйте столбец Имени, чтобы задать имя для состояния, такого как myState
.
Используйте столбец Класса памяти, чтобы применить класс памяти ExportedGlobal
.
Выберите вкладку Parameters. Вы не можете применить класс памяти непосредственно к параметрам блоков. Необходимо создать объект параметра, такой как Simulink.Parameter
, используйте объект установить значение параметров блоков и применить класс памяти к объекту.
Установите представление Change выпадающий список на Design
.
В поле содержимого Фильтра введите UpThr
.
Используйте Столбец значений, чтобы изменить значение параметров от 6
к UpThr
.
При редактировании значения параметров, рядом с UpThr
, кликните по кнопке действий (с тремя вертикальными точками) и выберите Create.
В диалоговом окне Create New Data, установленном Значении к Simulink.Parameter
и нажмите ОК. Simulink.Parameter
возразите названному UpThr
появляется в базовом рабочем пространстве.
В UpThr
диалоговое окно свойства, установленное Значение к 6
и Класс памяти к ExportedGlobal
. Нажать ОК.
В качестве альтернативы можно использовать эти команды в командной строке, чтобы сконфигурировать сигнал, состояние и данные о параметре.
% Configure signal portHandles = get_param('rtwdemo_roll/BasicRollMode/Integrator',... 'PortHandles'); outportHandle = portHandles.Outport; set_param(outportHandle,'Name','mySignal') set_param(outportHandle,'StorageClass','ExportedGlobal') % Configure state set_param('rtwdemo_roll/BasicRollMode/Integrator',... 'StateName','myState') set_param('rtwdemo_roll/BasicRollMode/Integrator',... 'StateStorageClass','ExportedGlobal') % Configure parameter set_param('rtwdemo_roll/RollAngleReference/UpThr','Value','UpThr') UpThr = Simulink.Parameter(6); UpThr.StorageClass = 'ExportedGlobal';
Сгенерируйте и смотрите код
Сгенерируйте код из модели.
set_param('rtwdemo_roll','SystemTargetFile','grt.tlc') rtwbuild('rtwdemo_roll')
### Starting build procedure for model: rtwdemo_roll ### Successful completion of build procedure for model: rtwdemo_roll ### Simulink cache artifacts for 'rtwdemo_roll' were created in 'H:\Documents\MATLAB\examples\simulinkcoder-ex37783258\rtwdemo_roll.slxc'.
Смотрите файл rtwdemo_roll.c
. Файл задает глобальные переменные.
file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.c'); rtwdemodbtype(file,'/* Exported block signals */','real32_T myState;',1,1)
/* Exported block signals */ real32_T mySignal; /* '<S1>/Integrator' */ /* Exported block parameters */ real32_T UpThr = 6.0F; /* Variable: UpThr * Referenced by: '<S3>/UpThr' */ /* Exported block states */ real32_T myState; /* '<S1>/Integrator' */
Файл rtwdemo_roll.h
объявляет переменные. Чтобы получить доступ к этим переменным, ваш внешний код может включать (#include
) этот заголовочный файл.
В rtwdemo_roll.c
, ищите файл имена переменных, таких как UpThr
. Алгоритм модели в rtwdemo_roll_step
функционируйте чтения и записи к переменным.
Установкой класса памяти по умолчанию для элемента данных является Auto
, что означает, что генератор кода определяет, как элемент появляется в коде. Для списка встроенных классов памяти, которые можно выбрать, смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Для каждого отдельного элемента данных состояния или сигнала (включая блоки Data Store Memory), к которому вы непосредственно применяете класс памяти, Simulink®stores ваша спецификация класса памяти или в файле модели или в свойствах объекта данных сигнала (Simulink.Signal
), который вы создаете в базовом рабочем пространстве, рабочем пространстве модели или словаре данных. Чтобы применить класс памяти к параметрам блоков, необходимо создать объект данных параметра (такой как Simulink.Parameter
) и задайте класс памяти в объекте.
Когда вы применяете класс памяти к сигналу или состоянию в модели, например, при помощи Model Data Editor или Property Inspector, вы храните спецификацию класса памяти в файле модели.
Если вы используете этот метод, вы не можете управлять другими характеристиками элемента данных, такими как тип данных, при помощи внешнего объекта данных сигнала.
Когда вы создаете сигнал или объект данных параметра, вы применяете класс памяти при помощи CoderInfo
свойство объекта. Значением свойства является Simulink.CoderInfo
объект, чей StorageClass
свойство вы используете, чтобы задать класс памяти. После того, как вы сопоставите элемент данных в модели с объектом, элемент данных получает класс памяти от объекта.
Для сигналов состояния и блоки Data Store Memory, чтобы решить, сохранить ли спецификацию класса памяти в модели или в объекте данных, видят Атрибуты Проекта Хранилища Сигналов и состояний (Simulink).
Можно использовать Model Data Editor, чтобы применить класс памяти непосредственно к блоку Outport корневого уровня или к входному сигналу, который управляет блоком.
Чтобы сохранить спецификацию класса памяти в блоке Outport, используйте вкладку Inports/Outports в Model Data Editor. Когда вы используете этот метод, спецификация остается после того, как вы удаляете входной сигнал, который управляет блоком. Используйте этот метод, чтобы сконфигурировать интерфейс модели, прежде чем вы разработаете внутренний алгоритм.
Чтобы сохранить спецификацию во входном сигнале, который управляет блоком, используйте вкладку Signals в Model Data Editor.
Чтобы применить классы памяти к нескольким элементам данных в списке, который можно искать, отсортируйте, и фильтр, используйте Model Data Editor (на вкладке Modeling, нажмите, Model Data Editor) как показано в Применяют Классы памяти к Элементам данных.
Чтобы применить класс памяти при фокусировке на одном сигнале, состояние блока или параметр, использует Property Inspector (на вкладке Modeling, под Design, нажмите Property Inspector), диалоговое окно Signal Properties (для сигнала), или диалоговое окно блока (для состояния или параметра). Под Code Generation примените класс памяти.
Для параметра, сначала устанавливает значение параметра к имени, которое вы хотите использовать в объекте обязательного параметра. Затем создайте и сконфигурируйте объект параметра как показано в, Создают Настраиваемый Калибровочный Параметр в Сгенерированном коде.
Для сигнала состояние или блок Data Store Memory, сначала дает сигнал или утверждает имя, которое генератор кода использует в качестве имени соответствующего глобального символа. Затем любой задает класс памяти с помощью Storage class (в этом случае хранилища файлов модели спецификация) или создает объект данных сигнала как показано в Объектах данных Использования в Моделях Simulink (Simulink) и применяет класс памяти к объекту.
Для параметров блоков используйте set_param
устанавливать значение параметра. Используйте другие команды, чтобы создать и сконфигурировать свойства объекта обязательного параметра. Для примера смотрите, Создают Настраиваемый Калибровочный Параметр в Сгенерированном коде.
Для сигнала используйте get_param
или find_system
возвратить указатель на порт блока, который генерирует сигнал. Используйте параметры указателя, чтобы назвать сигнал, затем примените класс памяти непосредственно (см., Применяют Класс памяти Непосредственно к Сигнальной линии), или сконфигурируйте сигнал получить настройки, включая класс памяти, от объекта сигнала (см. Объекты данных Использования в Моделях Simulink (Simulink)).
Для блока Inport сконфигурируйте сигнальную линию, которая выходит из блока. Для блока Outport сконфигурируйте блок или сигнальную линию, которая вводит блок. Для примера смотрите Интерфейс Данных проектирования путем Конфигурирования Блоков Inport и Выходного порта.
Для состояния блока используйте set_param
взаимодействовать с блоком. Назовите состояние, затем примените класс памяти непосредственно (см., Применяют Класс памяти Непосредственно к Состоянию блока), или сконфигурируйте состояние, чтобы получить класс памяти от объекта сигнала (см. Объекты данных Использования в Моделях Simulink (Simulink)).
Для блока Data Store Memory используйте set_param
взаимодействовать с блоком. Поскольку хранилище данных уже имеет имя, вы не должны задавать имя. Примените класс памяти непосредственно при помощи StateStorageClass
параметр или конфигурирует хранилище данных, чтобы получить класс памяти от объекта сигнала.
Чтобы взаимодействовать с сигналом или объектом данных параметра, который вы храните в рабочем пространстве модели или словаре данных, используйте программируемый интерфейс рабочей области или словаря. Смотрите Взаимодействуют С Переменными Программно (Simulink).
В этом примере показано, как программно применить класс памяти непосредственно к сигнальной линии.
Откройте модель rtwdemo_secondOrderSystem
в качестве примера.
rtwdemo_secondOrderSystem
Получите указатель на выход блока под названием Сила: f (t).
portHandles = ... get_param('rtwdemo_secondOrderSystem/Force: f(t)','PortHandles'); outportHandle = portHandles.Outport;
Определите имя соответствующего сигнала к ForceSignal
.
set_param(outportHandle,'Name','ForceSignal')
Установите класс памяти сигнала к ExportedGlobal
.
set_param(outportHandle,'StorageClass','ExportedGlobal')
Сгенерируйте код из модели. Код объявляет и задает глобальную переменную ForceSignal
представлять сигнал.
В этом примере показано, как программно применить класс памяти к состоянию блока.
Откройте модель rtwdemo_basicsc
в качестве примера.
rtwdemo_basicsc
Назовите состояние блока Delay как myState
.
set_param('rtwdemo_basicsc/Delay','StateName','myState')
Установите класс памяти состояния к ExportedGlobal
.
set_param('rtwdemo_basicsc/Delay',... 'StateStorageClass','ExportedGlobal')
Сгенерируйте код из модели. Код объявляет и задает глобальную переменную myState
представлять состояние.
Эта схема показывает генерацию кода и опции класса памяти, которые управляют представлением объектов параметра в сгенерированном коде.