exponenta event banner

Настройка хранилищ данных для генерации кода C

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

Тип хранилища данныхОписание
Локальное хранилище данныхХранилище данных, доступное в любом месте иерархии модели на уровне или ниже уровня, на котором определяется хранилище данных. Локальное хранилище данных можно определить графически в модели, включив блок памяти хранилища данных или создав объект сигнала (синтезированное хранилище данных) в рабочей области модели.
Общее локальное хранилище данныхБлок памяти хранилища данных с параметром блока Общий доступ для экземпляров модели. Эти хранилища данных доступны только в той модели, где они определены. Значение хранилища данных является общим для всех экземпляров модели.
Глобальное хранилище данныхХранилище данных, определяемое сигнальным объектом в базовой рабочей области или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении.

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

Настройка хранилищ данных для:

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие соображения для параметров модели включают в себя необходимость:

Список требований к интерфейсам, относящихся к хранилищам данных с соответствующими классами хранения и свойствами класса хранения, см. в разделе Выбор класса хранения и свойств класса хранения для хранилищ данных.

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

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

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

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

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

Настройка параметров создания кода по умолчанию для хранилищ данных

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

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

В этом примере показано, как использовать редактор сопоставления кодов для настройки параметров по умолчанию для хранилищ данных. Используйте редактор сопоставлений кодов, чтобы задать класс хранения по умолчанию для локальных и общих локальных хранилищ данных в 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 выберите Интерфейс кода > Сопоставления кодов по умолчанию.

  4. Настройка сопоставлений кодов по умолчанию для локальных хранилищ данных. В редакторе сопоставлений кодов на вкладке «Значения по умолчанию» разверните узел «Сигналы». Выберите категорию Сигналы, состояния и внутренние данные. Задайте для класса хранения значение 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. Настройте сопоставления кодов по умолчанию для общих локальных хранилищ данных. Выберите категорию Общие локальные хранилища данных. Задайте для класса хранения значение Volatile.

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

Настройка создания кода для отдельных хранилищ данных

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

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

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

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

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

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

  1. Если это еще не сделано, выполните шаги в разделе Настройка параметров генерации кода по умолчанию для хранилищ данных.

  2. В редакторе сопоставлений кодов перейдите на вкладку «Хранилища данных». Разверните узел Локальные хранилища данных. Класс хранения для хранения данных mode имеет значение Auto, что означает, что генератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет конфигурацию модели по умолчанию. В этом примере конфигурация модели по умолчанию определяет класс хранения Volatile.

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

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

  3. В редакторе сопоставлений кодов выберите локальное хранилище данных mode. Задайте для класса хранения значение Model default: Volatile.

  4. Настройка идентификатора кода для хранилища данных с именем, включающим префикс ds_. В редакторе сопоставлений кодов выберите общее локальное хранилище данных mode. В инспекторе свойств разверните узел «Код». Задайте для свойства класса хранения 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 квалификатор типа соответственно. Настройка блока памяти хранилища данных 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;
      }
    .
    .
    .
    

Выбор класса хранения и свойств класса хранения для хранилищ данных

В зависимости от требований к созданию кода выберите один из этих классов хранения, чтобы настроить создание кода для хранилищ данных.

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

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

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

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

См. также

|

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