Сконфигурируйте хранилища данных для генерации кода C

Хранилища данных позволяют подсистемам и моделям, на которые ссылаются, осуществлять обмен данными, не используя порты I/O, чтобы передать данные от уровня до уровня (см. Основы Хранилища данных и Хранилища данных в Сгенерированном коде). Типы хранилищ данных включают типы, перечисленные в эту таблицу.

Тип хранилища данныхОписание
Локальное хранилище данныхХранилище данных, которое доступно отовсюду в иерархии модели, которая является в или ниже уровня, на котором вы задаете хранилище данных. Можно задать локальное хранилище данных графически в модели включением блока Data Store Memory или путем создания объекта сигнала (синтезируемое хранилище данных) в рабочем пространстве модели.
Разделяемое локальное хранилище данныхБлок Data Store Memory с параметрами блоков Share across model instances установлен. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели.
Хранилище глобальных данныхХранилище данных, которое задано объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных.

Когда вы открываете модель в приложении Embedded Coder, локальном, и совместно использовали локальные хранилища данных, появляются в редакторе Отображений Кода, где можно сконфигурировать хранилища данных для генерации кода. Если модель использует хранилища глобальных данных, можно просмотреть их в редакторе Отображений Кода путем нажатия на Refresh соединитесь, который появляется справа от имени хранилища данных. Та ссылка инициирует схему обновления и добавляет хранилища глобальных данных, которые модель использует в представлении редактора.

Сконфигурируйте хранилища данных к:

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

  • Управляйте, куда генератор кода помещает данные в память.

  • Улучшите удобочитаемость и трассируемость сгенерированного кода.

Для генерации кода примеры показывают, как сконфигурировать хранилище данных для модели rtwdemo_configinterface. Можно сконфигурировать отображения кода при помощи Code Mappings Editor или API отображений кода (coder.mapping.api.CodeMapping).

Выберите Customization Options for Data Stores

По умолчанию локальные хранилища данных в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием model_DW. Разделяемые локальные хранилища данных появляются как поле структуры глобальных данных model_SharedDSM. На основе ваших требований интерфейса кода решите, настроить ли генерацию кода хранилищ данных. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление хранилищ данных в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:

  • Настроить ли настройку по умолчанию

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

  • Как объявить и обработать хранилища данных модели в сгенерированном коде

    • Как разделяют глобальные переменные

    • Читать из хранилищ данных как глобальные переменные, заданные во внешнем коде

    • Как вызывает к функциям доступа. Требует Embedded Coder®

    Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.

Другие факторы для параметров модели включают ли в:

Для списка интерфейсных требований, которые относятся к хранилищам данных с соответствующими классами памяти и свойствами класса памяти, смотрите Choose Storage Class and Storage Class Properties для Хранилищ данных.

Например, модель rtwdemo_configinterface, требования хранилища данных:

  • Представляйте локальные хранилища данных как отдельные глобальные переменные, заданные и заявленные с static введите спецификатор.

  • Представляйте совместно использованные локальные хранилища данных как отдельные глобальные переменные, заданные и заявленные с volatile введите спецификатор.

  • Примените префиксный ds_ к именам переменных, которые представляют хранилища данных.

В данном примере вы устанавливаете представление по умолчанию для локальных хранилищ данных в сгенерированном коде как глобальные переменные, которые имеют static введите спецификатор, и совместно использовал локальные хранилища данных как глобальные переменные, которые имеют volatile введите спецификатор. Затем вы конфигурируете локальное хранилище данных в модели, чтобы использовать класс памяти по умолчанию и идентификатор уникального кода, который включает необходимый префиксный ds_. Возможность идентификатора кода позволяет вам задать идентификаторы генерации кода, не имея необходимость изменять проект модели.

Сконфигурируйте настройки генерации кода по умолчанию для хранилищ данных

Настройки генерации кода по умолчанию для хранилищ данных могут уменьшать усилие по подготовке модели для генерации кода, особенно если модель имеет значительное количество хранилищ данных, что вы хотите получить доступ к тому, в то время как сгенерированный код выполняется. Выберите параметры конфигурации однажды, и генератор кода применяет те настройки к хранилищам данных через модель. Simulink® хранит настройку по умолчанию как часть модели.

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

В этом примере показано, как использовать Code Mappings Editor, чтобы сконфигурировать настройки по умолчанию для хранилищ данных. Используйте редактор Отображений Кода, чтобы установить класс памяти по умолчанию для локального, и совместно использовал локальные хранилища данных в модели rtwdemo_configinterface к FileScope и Volatile, соответственно. С теми настройками класса памяти генератор кода представляет хранилища данных в сгенерированном коде как глобальные переменные, которые имеют static и volatile введите спецификаторы.

  1. Открытая модель rtwdemo_configinterface. Сохраните копию модели к перезаписываемому местоположению.

    Simulink model to use for learning how to configure model data stores for code generation.

  2. Откройте приложение Embedded Coder.

  3. Во вкладке C Code выберите Code Interface> Default Code Mappings.

  4. Сконфигурируйте отображения кода по умолчанию для локальных хранилищ данных. В редакторе Отображений Кода, на вкладке Data Defaults, расширяют узел Signals. Выберите категорию Signals, states, and internal data. Установите класс памяти на FileScope.

    Code Mappings editor with Data Defaults tab selected, Signals tree node expanded, and storage class for Signals, states, and internal data set to FileScope.

  5. Сконфигурируйте отображения кода по умолчанию для разделяемых локальных хранилищ данных. Выберите категорию Shared local data stores. Установите класс памяти на Volatile.

  6. Сохраните модель.

Сконфигурируйте генерацию кода для отдельных хранилищ данных

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

Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для хранилищ данных индивидуально:

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

  • Использование несколько хранилищ данных той же категории.

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

В этом примере показано, как использовать редактор Отображений Кода, чтобы применить вашу установку класса памяти по умолчанию на блок Data Store Memory mode в модели rtwdemo_configinterface. Пример также показывает, как конфигурируют идентификатор кода для того хранилища данных.

  1. Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для Хранилищ данных.

  2. В редакторе Отображений Кода кликните по вкладке Data Stores. Расширьте Local Data Stores. Класс памяти для хранилища данных mode установлен в Auto, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти Volatile.

    • Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default.

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

  3. В редакторе Отображений Кода выберите локальное хранилище данных mode. Установите класс памяти на Model default: Volatile.

  4. Сконфигурируйте идентификатор кода для хранилища данных с именем, которое включает префиксный ds_. В редакторе Отображений Кода выберите совместно использованное локальное хранилище данных mode. В Property Inspector расширьте узел Code. Установите свойство Identifier класса памяти на ds_mode.

    Code Mappings editor with Data Stores tab selected, Shared Local Data Stores tree node expanded, and storage class for data store mode set to Model default: Volatile. Property Inspector shows Identifier property for data store mode set to ds_mode.

  5. Сохраните модель.

  6. Сгенерируйте и просмотрите код. Например, в rtwdemo_configinterface.c, найдите определения данных для хранилища данных.

    static boolean_T ds_mode;
    

    Найдите, где данные состояния используются в функции точки входа шага.

    .
    .
    .
      ds_mode = ((input1 > rtwdemo_configinterface_UPPER) || (input1 <
                  rtwdemo_configinterface_LOWER));
    .
    .
    .
      if (ds_mode) {
        output = (real_T)mp_K1 * dout_Table1;
      } else {
        output = dstate_X;
      }
    .
    .
    .
    

Сконфигурируйте настройки генерации кода для хранилищ данных программно

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

В этом примере показано, как использовать интерфейс программирования, чтобы сконфигурировать хранилища данных для модели rtwdemo_configinterface. Установите представление по умолчанию локальных, и совместно использовал локальные хранилища данных в сгенерированном коде как глобальные переменные, которые имеют static и volatile введите спецификатор, соответственно. Сконфигурируйте блок Data Store Memory mode использовать класс памяти по умолчанию и идентификатор уникального кода, который включает необходимый префиксный ds_.

  1. Откройте модель в качестве примера.

    open_system('rtwdemo_configinterface')
    
  2. Создайте объект cm путем вызывания функции coder.mapping.api.get. Объектно-ориентированная память данные и функциональная настройка генерации кода для модели rtwdemo_configinterface.

    cm = coder.mapping.api.get('rtwdemo_configinterface');
  3. Сконфигурируйте настройки по умолчанию для локальных хранилищ данных путем вызывания функции setDataDefault. Для аргументов задайте эти значения:

    • Объект, возвращенный coder.mapping.api.get

    • InternalData для категории по умолчанию

    • Имя свойства StorageClass со значением свойства FileScope

    setDataDefault(cm,'InternalData','StorageClass','FileScope');
  4. Сконфигурируйте настройки по умолчанию для разделяемых локальных хранилищ данных путем вызывания функции setDataDefault. Задайте эти значения для аргументов:

    • Объект, возвращенный coder.mapping.api.get.

    • SharedLocalDataStore для категории по умолчанию.

    • Имя свойства StorageClass со значением свойства Volatile.

    setDataDefault(cm,'SharedLocalDataStore','StorageClass','Volatile');
  5. Проверьте свои параметры конфигурации по умолчанию для локального, и совместно использовал локальные хранилища данных. Издайте приказ к getDataDefault это задает объект, возвращенный coder.mapping.api.get, категория InternalData, и свойство StorageClass. Во втором вызове getDataDefault, замените категорию на SharedLocalDataStore.

    getDataDefault(cm,'Internal','StorageClass')
    
    ans =
    
        'FileScope'
    
    getDataDefault(cm,'SharedLocalDataStore','StorageClass')
    
    ans =
    
        'Volatile'
    
  6. Примените настройку по умолчанию для локального хранилища данных 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');
    
  7. Проверьте свои изменения конфигурации путем вызывания функции getDataStore. Задайте объект, возвращенный coder.mapping.api.get, имя хранилища данных и свойство StorageClass или Identifier.

    getDataStore(cm,'mode','StorageClass')
    
    ans =
    
        'Model default'
    
    getDataStore(cm,'mode','Identifier')
    
    ans =
    
        'ds_mode'
    
  8. Сохраните модель.

  9. Сгенерируйте и просмотрите код. Например, в rtwdemo_configinterface.c, найдите определение данных для хранилища данных.

    static boolean_T ds_mode;
    

    Найдите, где хранилище данных используется в функции точки входа шага.

    .
    .
    .
      ds_mode = ((input1 > rtwdemo_configinterface_UPPER) || (input1 <
                  rtwdemo_configinterface_LOWER));
    .
    .
    .
      if (ds_mode) {
        output = (real_T)mp_K1 * dout_Table1;
      } else {
        output = dstate_X;
      }
    .
    .
    .
    

Выберите Storage Class и Storage Class Properties for Data Stores

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

ТребованияКласс памяти
Включите оптимизацию, потенциально генерируя более эффективный код.Автоматический (Только отдельные отображения)
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных.Значение по умолчанию (Значение по умолчанию, сопоставляющее только)
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте класс памяти по умолчанию для категории элемента данных.Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения)
Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях.Битовое поле (Индивидуум, сопоставляющий только)
Сгенерируйте определение глобальной переменной и объявление, которое имеет volatile введите спецификатор.Volatile (См. Const, энергозависимый, и ConstVolatile),
Сгенерируйте определение глобальной переменной и объявление.ExportedGlobal
Сгенерируйте определение глобальной переменной и объявление к заданному файлу.ExportToFile
Сгенерируйте определение глобальной переменной и объявление, которое имеет static введите спецификатор.FileScope (Только локальные и совместно использованные локальные отображения хранилища данных)
Сгенерируйте код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа.GetSet
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом.ImportedExtern, ImportedExternPointer
Сгенерируйте код, который читает из и пишет в глобальную переменную, заданную вашим внешним заголовочным файлом.ImportFromFile
Сгенерируйте переменные, которые локальны для функций.Локализуемый
Сгенерируйте глобальную структуру, которая имеет имя, которое можно задать.Struct (Только отдельные отображения)

Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры.

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

СвойствоОписаниеКлассы памяти
DefinitionFileИсходный файл определения, который содержит определения для глобальных данных, которые считаны по условию хранилище и внешний кодExportToFile и Volatile
GetFunctionХранилище данных появляется в сгенерированном коде как вызов заданного get функцияGetSet
HeaderFileИсходный заголовочный файл, который содержит объявления для глобальных данных, которые считаны по условию хранилище и внешний кодExportToFile, GetSet, ImportFromFile, и Volatile
Memory Section (только настройка хранилища данных по умолчанию)Раздел Memory, который содержит чтение данных по условию, хранитDefault
OwnerГенератор кода помещает определение для хранилищ данных в коде, сгенерированном для одной из многоуровневых моделей в иерархии модели та доля определения. Необходимо выбрать параметр конфигурации модели Use owner from data object for data definition placement. Смотрите Размещение Управления Определений Глобальных данных и Объявлений в Сгенерированных Файлах.ExportToFile и Volatile
PreserveDimensionsГенератор кода сохраняет размерности хранилищ данных, которые представлены в сгенерированном коде как многомерный массив. Необходимо установить параметр конфигурации модели Array layout на Row-major. Смотрите размерности заповедника многомерных массивов в сгенерированном коде.ExportToFile, FileScope, ImportFromFile, Localizable и Volatile
SetFunctionХранилище данных появляется в сгенерированном коде как вызов заданного set функция.GetSet
StructNameНазовите для структуры в сгенерированном коде для хранилища данных.BitField и Struct

Смотрите также

|

Похожие темы