Сконфигурируйте состояния блока для генерации кода C

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

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

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

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

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

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

Выберите Code Configuration Options for States

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В этом примере показано, как использовать Code Mappings editor, чтобы сконфигурировать настройки по умолчанию для состояний. Используйте редактор Отображений Кода, чтобы установить класс памяти по умолчанию для состояний в модели 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 Code выберите Code Interface> Default Code Mappings.

  4. В редакторе Отображений Кода, под 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. Сохраните модель.

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

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

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

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

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

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

В этом примере показано, как использовать редактор Отображений Кода, чтобы применить вашу установку класса памяти по умолчанию на состояние блока Unit Delay X в модели rtwdemo_configinterface.

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

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

  2. В редакторе Отображений Кода кликните по вкладке Signals/States. Expand States. Класс памяти для состояния установлен в Auto, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти FileScope.

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

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

  3. В редакторе Отображений Кода выберите X состояния. Установите класс памяти на.

  4. Сконфигурируйте идентификатор кода для состояния с именем, которое включает префиксный dstate_. В редакторе Отображений Кода выберите X состояния. В Property Inspector расширьте узел Code. Затем установите свойство 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;
    }
    

Выберите Storage Class и Storage Class Properties for States

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

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

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

|

Похожие темы