Хранилища данных позволяют подсистемам и моделям, на которые ссылаются, осуществлять обмен данными, не используя порты I/O, чтобы передать данные от уровня до уровня (см. Основы Хранилища данных и Хранилища данных в Сгенерированном коде). Типы хранилищ данных включают типы, перечисленные в эту таблицу.
Тип хранилища данных | Описание |
---|---|
Локальное хранилище данных | Хранилище данных, которое доступно отовсюду в иерархии модели, которая является в или ниже уровня, на котором вы задаете хранилище данных. Можно задать локальное хранилище данных графически в модели включением блока Data Store Memory. |
Разделяемое локальное хранилище данных | Блок Data Store Memory с параметрами блоков Share across model instances установлен. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели. |
Хранилище глобальных данных | Хранилище данных, которое задано объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных. |
Когда вы открываете модель в приложении Simulink Coder, локальном, и совместно использовали локальные хранилища данных, появляются в редакторе Отображений Кода, где можно сконфигурировать хранилища данных для генерации кода. Если модель использует хранилища глобальных данных, можно просмотреть их в редакторе Отображений Кода путем нажатия на Refresh
соединитесь, который появляется справа от имени хранилища данных. Та ссылка инициирует схему обновления и добавляет хранилища глобальных данных, которые модель использует в представлении редактора.
Сконфигурируйте хранилища данных к:
Сделайте данные доступными для взаимодействия, в то время как сгенерированный код выполняется.
Управляйте, куда генератор кода помещает данные в память.
Улучшите удобочитаемость и трассируемость сгенерированного кода.
Для генерации кода примеры показывают, как сконфигурировать хранилище данных для модели rtwdemo_configrpinterface
. Можно сконфигурировать отображения кода при помощи Code Mappings editor или API отображений кода (coder.mapping.api.CodeMapping
).
По умолчанию локальные хранилища данных в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием
. Разделяемые локальные хранилища данных появляются как поле структуры глобальных данных model
_DW
. На основе ваших требований интерфейса кода решите, настроить ли генерацию кода хранилищ данных. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление хранилищ данных в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:model
_SharedDSM
Настроить ли настройку по умолчанию
Если модель включает значительное количество (например, больше чем 10) хранилищ данных для данной категории, которая должна быть доступной во время выполнения программы, более эффективно сконфигурировать хранилища данных с настройкой по умолчанию, и затем заменить ту установку для особых случаев. Если модель включает несколько хранилищ данных для данной категории, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование хранилищ данных индивидуально.
Как объявить и обработать хранилища данных модели в сгенерированном коде
Как разделяют глобальные переменные
Читать из хранилищ данных как глобальные переменные, заданные во внешнем коде
Как вызывает к функциям доступа. Требует Embedded Coder®
Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.
Другие факторы для параметров модели включают ли в:
Назовите хранилища данных в сгенерированном коде при помощи имен хранилищ данных в модели или при помощи идентификаторов уникального кода.
Включайте static
введите спецификатор в определениях глобальной переменной и объявлениях, например, чтобы предотвратить столкновения имени. Требует Embedded Coder. Смотрите Предотвращают Столкновения Имени путем Конфигурирования Элемента данных как статического (Embedded Coder).
Включайте volatile
введите спецификатор в определениях глобальной переменной и объявлениях. Требует Embedded Coder. Смотрите Защищают Глобальные данные с const и энергозависимыми Спецификаторами Типа (Embedded Coder).
Сгенерируйте структуру глобальных данных с именем, которое вы задаете. Требует Embedded Coder. Смотрите Организуют Данные в Структуры в Сгенерированном коде (Embedded Coder).
Поместите хранилища данных в определенную область памяти. Требует Embedded Coder. Смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм (Embedded Coder).
Для списка интерфейсных требований, которые относятся к хранилищам данных с соответствующими классами памяти и свойствами класса памяти, смотрите Choose Storage Class and Storage Class Properties для Хранилищ данных.
Например, модель rtwdemo_configrpinterface
, требования хранилища данных:
Представляйте локальный, и совместно использовал локальные хранилища данных как отдельные глобальные переменные.
Примените префиксный ds_
к именам переменных, которые представляют хранилища данных.
В данном примере вы устанавливаете представление по умолчанию для локального и совместно использовали локальные хранилища данных в сгенерированном коде как глобальные переменные. Затем вы конфигурируете локальное хранилище данных в модели, чтобы использовать класс памяти по умолчанию и идентификатор уникального кода, который включает необходимый префиксный ds_
. Возможность идентификатора кода позволяет вам задать идентификаторы генерации кода, не имея необходимость изменять проект модели.
Настройки генерации кода по умолчанию для хранилищ данных могут уменьшать усилие по подготовке модели для генерации кода, особенно если модель имеет значительное количество хранилищ данных, что вы хотите получить доступ к тому, в то время как сгенерированный код выполняется. Выберите параметры конфигурации однажды, и генератор кода применяет те настройки к хранилищам данных через модель. Simulink® хранит настройку по умолчанию как часть модели.
Рассмотрите конфигурирующие настройки генерации кода по умолчанию для хранилищ данных модели, если ваша модель использует несколько хранилищ данных для данной категории, которые не имеют уникальных требований.
В этом примере показано, как использовать Code Mappings editor, чтобы сконфигурировать настройки по умолчанию для хранилищ данных. Используйте редактор Отображений Кода, чтобы установить класс памяти по умолчанию для локального, и совместно использовал локальные хранилища данных в модели rtwdemo_configrpinterface
к ExportedGlobal
. С теми настройками класса памяти генератор кода представляет хранилища данных в сгенерированном коде как глобальные переменные.
Открытая модель rtwdemo_configrpinterface
. Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Simulink Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
Сконфигурируйте отображения кода по умолчанию для локальных хранилищ данных. В редакторе Отображений Кода, на вкладке Data Defaults, расширяют узел Signals. Выберите категорию Signals, states, and internal data. Установите класс памяти на ExportedGlobal
.
Сконфигурируйте отображения кода по умолчанию для разделяемых локальных хранилищ данных. Выберите категорию Shared local data stores. Установите класс памяти на ExportedGlobal
.
Сохраните модель.
Можно сконфигурировать отдельные хранилища данных для генерации кода. Например, если модель имеет два хранилища данных той же категории, которые имеют требования генерации уникального кода, конфигурируют хранилища данных индивидуально. Или, если вы конфигурируете настройки по умолчанию для категории хранилищ данных, можно заменить те настройки для определенных хранилищ данных.
Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для хранилищ данных индивидуально:
Использование несколько хранилищ данных той же категории, которые имеют уникальный источник, именование или требования размещения.
Использование несколько хранилищ данных той же категории.
Имеет настройку по умолчанию для категории хранилищ данных, и необходимо заменить настройку для некоторых определенных состояний.
В этом примере показано, как использовать редактор Отображений Кода, чтобы применить вашу установку класса памяти по умолчанию на блок Data Store Memory mode
в модели rtwdemo_configinterface
. Пример также показывает, как конфигурируют идентификатор кода для того хранилища данных.
Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для Хранилищ данных.
В редакторе Отображений Кода кликните по вкладке Data Stores. Расширьте Local Data Stores. Класс памяти для хранилища данных mode
установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти ExportedGlobal
.
Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default
.
Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того хранилища данных.
В редакторе Отображений Кода выберите локальное хранилище данных mode
. Установите класс памяти на Model default: ExportedGlobal
.
Сконфигурируйте идентификатор кода для хранилища данных с именем, которое включает префиксный ds_
. В редакторе Отображений Кода выберите совместно использованное локальное хранилище данных mode
. Кликните по значку и установите свойство Identifier класса памяти на ds_mode
.
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в rtwdemo_configrpinterface.c
, найдите определения данных для хранилища данных.
boolean_T ds_mode;
Найдите, где данные состояния используются в функции точки входа шага.
. . . ds_mode = ((input1 > rtwdemo_configrpinterface_UPPER) || (input1 < rtwdemo_configrpinterface_LOWER)); . . . if (ds_mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; } . . .
Чтобы автоматизировать настройку хранилищ данных для генерации кода, используйте интерфейс программирования для отображений кода. Например, при создании библиотек пользовательского блока или части тестовой среды приложения, используйте интерфейс программирования, чтобы автоматизировать настройку данных.
В этом примере показано, как использовать интерфейс программирования, чтобы сконфигурировать хранилища данных для модели rtwdemo_configrpinterface
. Установите представление по умолчанию локальных, и совместно использовал локальные хранилища данных в сгенерированном коде как глобальные переменные. Сконфигурируйте блок Data Store Memory mode
использовать класс памяти по умолчанию и идентификатор уникального кода, который включает необходимый префиксный ds_
.
Откройте модель в качестве примера.
open_system('rtwdemo_configrpinterface')
Создайте объект cm
путем вызывания функции coder.mapping.api.get
. Объектно-ориентированная память настройка генерации кода данных для модели rtwdemo_configrpinterface
.
cm = coder.mapping.api.get('rtwdemo_configrpinterface');
Сконфигурируйте настройки по умолчанию для локальных хранилищ данных путем вызывания функции setDataDefault
. Для аргументов задайте эти значения:
Объект, возвращенный coder.mapping.api.get
InternalData
для категории по умолчанию
Имя свойства StorageClass
со значением свойства ExportedGlobal
setDataDefault(cm,'InternalData','StorageClass','ExportedGlobal');
Сконфигурируйте настройки по умолчанию для разделяемых локальных хранилищ данных путем вызывания функции setDataDefault
. Задайте эти значения для аргументов:
Объект, возвращенный coder.mapping.api.get
.
SharedLocalDataStore
для категории по умолчанию.
Имя свойства StorageClass
со значением свойства ExportedGlobal
.
setDataDefault(cm,'SharedLocalDataStore','StorageClass','ExportedGlobal');
Проверьте свои параметры конфигурации по умолчанию для локального, и совместно использовал локальные хранилища данных. Издайте приказ к getDataDefault
это задает объект, возвращенный coder.mapping.api.get
, категория InternalData
, и свойство StorageClass
. Во втором вызове getDataDefault
, замените категорию на SharedLocalDataStore
.
getDataDefault(cm,'InternalData','StorageClass') ans = 'ExportedGlobal' getDataDefault(cm,'SharedLocalDataStore','StorageClass') ans = 'ExportedGlobal'
Примените настройку по умолчанию для локального хранилища данных mode
.
По умолчанию Simulink устанавливает класс памяти для хранилищ данных к Auto
. Когда классом памяти является Auto
, генератор кода:
Определяет, устранить ли данные из сгенерированного кода в целях оптимизации.
При сохранении данных, определяет, как эффективно представлять данные в сгенерированном коде, учитывая параметры конфигурации по умолчанию.
Чтобы управлять настройкой для отдельного хранилища данных, вызовите функцию setDataStore
. Издайте приказ к setDataStore
это задает:
Объект, возвращенный coder.mapping.api.get
Имя хранилища данных mode
Класс памяти по умолчанию ранее установлен для хранилища данных при помощи свойства StorageClass
и значение свойства Model default
.
Свойство Identifier
и значение свойства ds_mode
setDataStore(cm,'mode','StorageClass','Model default','Identifier','ds_mode');
Проверьте свои изменения конфигурации путем вызывания функции getDataStore
. Задайте объект, возвращенный coder.mapping.api.get
, имя хранилища данных и свойство StorageClass
или Identifier
.
getDataStore(cm,'mode','StorageClass') ans = 'Model default' getDataStore(cm,'mode','Identifier') ans = 'ds_mode'
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в rtwdemo_configrpinterface.c
, найдите определение данных для хранилища данных.
boolean_T ds_mode;
Найдите, где хранилище данных используется в функции точки входа шага.
. . . ds_mode = ((input1 > rtwdemo_configrpinterface_UPPER) || (input1 < rtwdemo_configrpinterface_LOWER)); . . . if (ds_mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; } . . .
В зависимости от ваших требований генерации кода примите решение из этих классов памяти сконфигурировать генерацию кода для хранилищ данных.
Требования | Класс памяти |
---|---|
Включите оптимизацию, потенциально генерируя более эффективный код. | Автоматический (Только отдельные отображения) |
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных. | Значение по умолчанию (Значение по умолчанию, сопоставляющее только) |
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте класс памяти по умолчанию для категории элемента данных. | Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения) |
Сгенерируйте определение глобальной переменной и объявление. | ExportedGlobal |
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры (Embedded Coder).
Для отдельного хранилища данных используйте свойство класса памяти Identifier сконфигурировать имя для переменной, представляющей хранилище данных в сгенерированном коде.
Редактор Отображений кода | coder.mapping.api.CodeMapping