exponenta event banner

Настройка состояний блокировки для генерации кода C

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

  • Минимизируйте объем данных, хранящихся в памяти.

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

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

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

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

Выбор параметров конфигурации кода для состояний

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

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

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

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

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

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

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

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

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

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

Требования к состоянию для примера модели rtwdemo_configinterface являются:

  • Сохранение данных состояния блока Unit Delay для специальных возможностей во время выполнения созданного кода.

  • Представить состояние как отдельную глобальную переменную.

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

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

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

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

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

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

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

    Simulink model to use for learning how to configure model states 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. Сохраните модель.

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

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

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

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

  • Использует несколько состояний.

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

В этом примере показано, как с помощью редактора сопоставлений кодов применить настройки класса хранения по умолчанию к состоянию блока «Задержка установки» X в модели rtwdemo_configinterface.

В примере также показано, как настроить идентификатор кода для этого состояния. Можно указать идентификаторы генерации кода, например для интеграции, без изменения конструкции модели.

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

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

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

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

  3. В редакторе сопоставлений кодов выберите состояние X. Задайте для класса хранения значение.

  4. Настройка идентификатора кода для состояния с именем, включающим префикс dstate_. В редакторе сопоставлений кодов выберите состояние X. В инспекторе свойств разверните узел «Код». Затем задайте свойству класса хранения Identifier значение dstate_X.

    Code Mappings editor with Signals/States tab selected, States tree node expanded, and storage class for state X set to Model default: FileScope. Property Inspector shows Identifier property for state X set to dstate_X.

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

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

    static MYTYPE dstate_X;
    

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

    .
    .
    .
      if (mode) {
        output = (real_T)mp_K1 * dout_Table1;  
      } else {
        output = dstate_X;
      }
    .
    .
    .
       dstate_X = dout_Table2;
    }
    

Настройка параметров генерации кода для состояний программно

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

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

  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. Проверьте конфигурацию состояний по умолчанию. Выполните вызов для getDataDefault который указывает объект, возвращенный coder.mapping.api.get и категория InternalData. Укажите третий аргумент в качестве свойства StorageClass.

    getDataDefault(cm,'InternalData','StorageClass')
    
    ans =
    
        'FileScope'
    
  5. Применение конфигурации по умолчанию для состояний X.

    По умолчанию Simulink устанавливает класс хранения для отдельных состояний на Auto. Генератор кода:

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

    • При сохранении данных определяет способ эффективного представления данных в сгенерированном коде с учетом настроек конфигурации по умолчанию.

    Для управления конфигурацией состояния вызовите функцию setState.

    Выполните вызов setState которая определяет:

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

    • Название штата X

    • Класс хранения по умолчанию, ранее установленный для состояний с помощью свойства StorageClass и значение свойства Model default.

    • Собственность Identifier и значение свойства dstate_X

    setState(cm,'X','StorageClass','Model default','Identifier','dstate_X');
    
  6. Проверьте изменения конфигурации, вызвав функцию getState. Укажите объект, возвращенный coder.mapping.api.get, название государства и свойство StorageClass или Identifier.

    getState(cm,'X','StorageClass')
    
    ans =
    
        'Model default'
    
    getState(cm,'X','Identifier')
    
    ans =
    
        'dstate_X'
    
  7. Сохраните модель.

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

    static MYTYPE dstate_X;
    

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

    .
    .
    .
      if (mode) {
        output = (real_T)mp_K1 * dout_Table1;  
      } else {
        output = dstate_X;
      }
    .
    .
    .
       dstate_X = dout_Table2;
    }
    

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

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

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

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

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

СобственностьОписаниеКлассы хранения
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

См. также

|

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