В Применяют Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра, вы управляете объявлением и определением глобальных переменных в сгенерированном коде путем применения классов памяти непосредственно к отдельным элементам данных. С Embedded Coder® и основанным на ERT системным конечным файлом, можно иметь более точный контроль над способом, которым данные появляются в сгенерированном коде.
Чтобы достигнуть шаблонов кода С, таких как сгруппированные переменные в плоские структуры и управлять объявлением и размещением файла определения, можно использовать классы памяти, доступные с Embedded Coder, от встроенного пакета Simulink
.
Для получения информации о применении классов памяти к категориям данных по умолчанию, при помощи Кода, Сопоставляющего Редактор, видят, Конфигурируют Генерацию кода По умолчанию для Данных.
Для списка встроенных классов памяти, которые можно выбрать, смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Если классы памяти от Simulink
пакет не удовлетворяет вашим требованиям, можно задать собственные классы памяти. Для получения информации об определении вашего собственного класса памяти смотрите, Создают Определения Кода, чтобы Заменить Настройки по умолчанию.
Непосредственно применять класс памяти от встроенного пакета Simulink
в интерактивном режиме используйте методы, описанные в, Применяют Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра.
Применять класс памяти от пакета кроме Simulink
(такие как пакет, который вы создаете):
Чтобы применить класс памяти к сигналу, состояние или блок Data Store Memory (не создавая объект данных), конфигурирует элемент данных, чтобы использовать классы памяти от целевого пакета вместо Simulink
пакет. Например, если именем целевого пакета является myPackage
, в диалоговом окне Signal Properties или Property Inspector, набор Signal object class к myPackage.Signal
. Если целевой класс не появляется в списке, смотрите, что Целевой Класс Не Появляется в Списке Классов объектов Сигнала.
Если вы используете Model Data Editor, чтобы идентифицировать целевой пакет, необходимо использовать различный метод. Смотрите Применяют Класс памяти от Определенного Пакета, чтобы Сигнализировать, состояние или Блок памяти Хранилища данных Используя Model Data Editor.
Применять класс памяти при помощи объекта данных (требуемый для параметров блоков), вместо того, чтобы создать Simulink.Signal
или Simulink.Parameter
возразите, создайте myPackage.Signal
или myPackage.Parameter
объект. Чтобы создать объекты данных из вашего пакета, смотрите, Создают Объекты данных из Другого Пакета Класса Данных (Simulink). Для примера, который показывает, как создать и применить ваш собственный класс памяти, смотрите, Создают и Применяют Класс памяти.
Когда вы используете Signal object class выпадающий список в диалоговом окне или в Property Inspector, если класс, который вы хотите, не появляется в списке:
Из списка выберите Customize class lists
.
В диалоговом окне, под Signal classes, устанавливают флажок рядом с классом, который вы хотите. Например, чтобы использовать классы памяти от встроенного пакета mpt
, установите флажок рядом с mpt.Signal
. Нажмите OK.
Если вы создали свой собственный пакет, классы, которые задает пакет, появляются в диалоговом окне, только если вы помещаете папку пакета в свою текущую папку или помещаете родительскую папку папки пакета на пути MATLAB®.
Из выпадающего списка выберите опцию, которая соответствует тому, что вы выбрали. Например, выберите mpt.Signal
.
Когда вы будете использовать Model Data Editor, чтобы применить классы памяти от определенного пакета, используйте Model Explorer, чтобы создать объект сигнала из целевого пакета. Затем когда вы открываете Model Data Editor, классы памяти отображений столбца Storage class от целевого пакета.
В панели Model Hierarchy Model Explorer выберите Base Workspace.
На панели инструментов кликните по стреле рядом с кнопкой Add Signal.
В выпадающем списке выберите Customize class lists
.
В диалоговом окне Customize class lists выберите класс сигнала из целевого пакета. Нажмите OK.
На панели инструментов Model Explorer кликните по стреле рядом с кнопкой Add Signal.
В выпадающем списке выберите целевой класс сигнала.
Объект целевого класса сигнала появляется в базовом рабочем пространстве. Опционально, удалите этот лишний объект.
Используйте Model Data Editor, чтобы применить классы памяти от целевого пакета до других элементов данных. В Model Data Editor, в столбце Storage class, выпадающий список позволяет вам выбирать классы памяти из целевого пакета.
Чтобы изучить, как использовать Model Data Editor, чтобы сконфигурировать интерфейс данных, смотрите Интерфейс Данных проектирования путем Конфигурирования Блоков Inport и Выходного порта (Simulink Coder).
Применять класс памяти к отдельному элементу данных программно:
Создайте сигнал или объект данных параметра от целевого пакета. Например, создайте Simulink.Signal
возразите или myPackage.Parameter
объект.
myParam = Simulink.Parameter(5.2);
Во вложенном Simulink.CoderInfo
объект, набор StorageClass
свойство к 'Custom'
. Затем используйте CustomStorageClass
свойство задать класс памяти.
myParam.CoderInfo.StorageClass = 'Custom'; myParam.CoderInfo.CustomStorageClass = 'ExportToFile';
Если класс памяти позволяет вам задавать дополнительные настройки, такие как Header file (см., Указание имени файла и Другие Атрибуты Данных С Классом памяти (Embedded Coder)), во вложенном Simulink.CoderInfo
объект, используйте CustomAttributes
свойство задать значения для дополнительных настроек.
myParam.CoderInfo.CustomAttributes.HeaderFile = 'myHeader.h';
Выберите один из этих методов, чтобы применить класс памяти к элементу данных в модели:
Чтобы применить класс памяти непосредственно к сигналу, состояние или блок Data Store Memory, называет сигнал или состояние. Затем используйте объект данных, который вы создали, чтобы установить SignalObject
свойство сигнала, SignalObject
параметры блоков (для блока Outport), или StateSignalObject
параметры блоков. Очистите объект данных, который вы создали. Для примера смотрите, Применяют Класс памяти Непосредственно к Сигнальной линии Программно.
Чтобы применить класс памяти путем хранения объекта данных, вы создали (требуемый для параметров), сопоставьте объект данных с элементом данных в модели. Чтобы сделать эту ассоциацию, смотрите Объекты данных Использования в Моделях Simulink (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')
В базовом рабочем пространстве создайте объект сигнала и задайте класс памяти и соответствующие дополнительные настройки, такие как HeaderFile
.
tempObj = Simulink.Signal; tempObj.CoderInfo.StorageClass = 'Custom'; tempObj.CoderInfo.CustomStorageClass = 'ExportToFile'; tempObj.CoderInfo.CustomAttributes.HeaderFile = 'myHdrFile.h';
Можно создать объект из пакета класса данных Simulink
, или от любого другого пакета, такого как пакет, который вы создаете.
Встройте объект сигнала в целевую сигнальную линию путем присоединения копии временного объекта рабочей области.
set_param(outportHandle,'SignalObject',tempObj);
Очистите объект от базового рабочего пространства. Сигнал теперь использует встроенную копию объекта.
clear tempObj
Чтобы изменить существующий встроенный объект сигнала, скопируйте объект в базовое рабочее пространство, измените копию и повторно прикрепите копию к сигналу или состоянию. Например, чтобы изменить класс памяти встроенного объекта сигнала, который вы присоединили к ForceSignal
сигнала в применяют класс памяти непосредственно к сигнальной линии программно:
Скопируйте существующий встроенный объект сигнала в базовое рабочее пространство.
tempObj = get_param(outportHandle,'SignalObject');
Измените свойства объекта в рабочей области.
tempObj.CoderInfo.CustomStorageClass='ImportFromFile'; tempObj.CoderInfo.CustomAttributes.HeaderFile = 'myOtherHdrFile.h';
Повторно прикрепите копию объекта сигнала.
set_param(outportHandle,'SignalObject',tempObj); clear tempObj
Struct
Класс памятиВ этом примере показано, как использовать Struct
класс памяти, чтобы организовать значения параметров блоков в структуру в сгенерированном коде. Вы применяете класс памяти непосредственно к отдельным элементам данных в модели.
Чтобы создать пользовательскую структуру данных о параметре в сгенерированном коде, рассмотрите создание соответствующей структуры в Simulink®. Смотрите Организуют Данные в Структуры в Сгенерированном коде.
Создайте ex_struct_param
модель с тремя блоками Constant и тремя блоками Outport.
На вкладке Modeling нажмите Model Data Editor.
В Model Data Editor выберите вкладку Parameters.
В модели выберите верхний блок Constant.
В Model Data Editor используйте столбец Value, чтобы установить постоянное значение к p1
.
Рядом с p1
, кликните по кнопке действий и выберите Create.
В диалоговом окне Create New Data, набор Value к Simulink.Parameter(1.0)
и нажмите Create.
Simulink.Parameter
возразите названному p1
появляется в базовом рабочем пространстве.
В диалоговом окне свойства для p1
, нажмите OK.
Используйте Model Data Editor, чтобы установить другие постоянные значения при помощи объектов параметра под названием p2
(значение 2.0
) и p3
(значение 3.0
).
В Model Data Editor, набор Change view выпадающий список к Code
.
Нажмите кнопку Show/refresh additional information.
Таблица данных теперь содержит строки, которые соответствуют новым объектам параметра.
Используйте столбец Storage Class, чтобы применить класс памяти Struct
ко всем трем объектам параметра.
Используйте столбец Struct Name, чтобы определить имя структуры к my_struct
.
Нажмите Ctrl+B, чтобы сгенерировать код.
Файл ex_struct_param.h
задает тип структуры, my_struct_type
.
/* Type definition for custom storage class: Struct */ typedef struct my_struct_tag { real_T p1; real_T p2; real_T p3; } my_struct_type;
Файл ex_struct_param.c
задает глобальную переменную my_struct
.
/* Definition for custom storage class: Struct */ my_struct_type my_struct = { /* p1 */ 1.0, /* p2 */ 2.0, /* p3 */ 3.0 };
Для получения информации об ограничениях смотрите Ограничения Класса памяти.