Состояния блока, такие как состояние блока Unit Delay, сохраняют значение состояния между циклами выполнения алгоритма. При конфигурировании модели для генерации кода можно сконфигурировать данные состояния к:
Минимизируйте объем данных, который хранится в памяти.
Управляйте, куда генератор кода помещает данные состояния в память.
Продвиньте данные состояния интерфейс модели так, чтобы другие компоненты и системы могли получить доступ к тем данным.
Улучшите удобочитаемость и трассируемость сгенерированного кода.
Для генерации кода примеры показывают, как сконфигурировать состояние блока для модели rtwdemo_configinterface
. Можно сконфигурировать отображения кода при помощи Code Mappings editor или интерфейса программирования отображений кода (coder.mapping.api.CodeMapping
).
На основе ваших требований генерации кода решите, как представлять данные состояния. По умолчанию состояния в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием
. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление состояний в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:model
_DW
Настроить ли настройку по умолчанию
Если необходимо получить доступ к значительному количеству состояний (например, больше чем 10), более эффективно сконфигурировать состояния с настройками по умолчанию и затем заменить те настройки для особых случаев. Если необходимо получить доступ к нескольким состояниям, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование состояний индивидуально.
Как объявить и обработать данные состояния в сгенерированном коде
Как разделяют глобальные переменные
Считать входные данные из глобальных переменных, заданных во внешнем коде
Как вызывает к функциям доступа. Требует Embedded Coder®
Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.
Другие факторы включают ли в:
Назовите состояния в сгенерированном коде при помощи меток состояния, которые появляются в модели или при помощи идентификаторов уникального кода.
Включайте volatile
введите спецификатор в определениях глобальной переменной и объявлениях. Требует Embedded Coder. Смотрите Защищают Глобальные данные с const и энергозависимыми Спецификаторами Типа.
Поместите данные состояния в определенную область памяти. Требует 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
введите спецификатор.
Открытая модель rtwdemo_configinterface
. Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Embedded Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
В редакторе Отображений Кода, под Signals, избранная категория Signals, states, and internal data. Установите класс памяти по умолчанию на FileScope
.
Сохраните модель.
Можно сконфигурировать отдельные государства для генерации кода. Например, если модель имеет два состояния, которые имеют требования генерации уникального кода, конфигурируют состояния индивидуально. Или, если вы конфигурируете настройки по умолчанию для состояний, можно заменить те настройки для определенных состояний.
Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для состояний индивидуально:
Использование несколько состояний, которые имеют уникальный источник, именование или требования размещения.
Использование несколько состояний.
Имеет настройку по умолчанию для состояний, и необходимо заменить настройку для некоторых определенных состояний.
В этом примере показано, как использовать редактор Отображений Кода, чтобы применить вашу установку класса памяти по умолчанию на состояние блока Unit Delay X
в модели rtwdemo_configinterface
.
Пример также показывает, как сконфигурировать идентификатор кода для того состояния. Можно задать идентификаторы генерации кода, например, для интегрирования, не изменяя проект модели.
Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для состояний.
В редакторе Отображений Кода кликните по вкладке Signals/States. Expand States. Класс памяти для состояния установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти FileScope
.
Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default
.
Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того состояния.
В редакторе Отображений Кода выберите X
состояния. Установите класс памяти на
Model default: FileScope
.
Сконфигурируйте идентификатор кода для состояния с именем, которое включает префиксный dstate_
. В редакторе Отображений Кода выберите X
состояния. Кликните по значку и установите свойство Identifier класса памяти на
dstate_X
.
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в 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_
.
Откройте модель в качестве примера.
open_system('rtwdemo_configinterface')
Создайте объект cm
путем вызывания функции coder.mapping.api.get
. Объектно-ориентированная память настройка генерации кода для данных и функции для модели rtwdemo_configinterface
.
cm = coder.mapping.api.get('rtwdemo_configinterface');
Сконфигурируйте настройки по умолчанию для состояний путем вызывания функции setDataDefault
. Для аргументов задайте эти значения:
Объект, возвращенный coder.mapping.api.get
InternalData
для категории по умолчанию
Имя свойства StorageClass
со значением свойства FileScope
setDataDefault(cm,'InternalData','StorageClass','FileScope');
Проверьте свою настройку по умолчанию для состояний. Издайте приказ к getDataDefault
это задает объект, возвращенный coder.mapping.api.get
и категория InternalData
. Задайте третий аргумент как свойство StorageClass
.
getDataDefault(cm,'InternalData','StorageClass') ans = 'FileScope'
Примените настройку по умолчанию для состояний, чтобы утвердить 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');
Проверьте свои изменения конфигурации путем вызывания функции getState
. Задайте объект, возвращенный coder.mapping.api.get
, имя состояния и свойство StorageClass
или Identifier
.
getState(cm,'X','StorageClass') ans = 'Model default' getState(cm,'X','Identifier') ans = 'dstate_X'
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в 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 (Только отдельные отображения) |
Сгенерируйте структуру, которая хранит булевы данные в именованных битовых полях. | Битовое поле (Индивидуум, сопоставляющий только) |
Сгенерируйте определение глобальной переменной и объявление, которое имеет volatile введите спецификатор. | Volatile (См. Const, энергозависимый, и ConstVolatile), |
Сгенерируйте определение глобальной переменной и объявление. | ExportedGlobal |
Сгенерируйте определение глобальной переменной и объявление к заданному файлу. | ExportToFile |
Сгенерируйте определение глобальной переменной и объявление, которое имеет static введите спецификатор. | FileScope (Только локальные и совместно использованные локальные отображения хранилища данных) |
Сгенерируйте код, который взаимодействует с данными путем вызывания пользовательских функций средства доступа. | GetSet |
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
ExportToFile | 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 |
Редактор Отображений кода | coder.mapping.api.CodeMapping