Состояния блока, такие как состояние блока Unit Delay, сохраняют значение состояния между циклами выполнения алгоритма. При конфигурировании модели для генерации кода можно сконфигурировать данные состояния к:
Минимизируйте объем данных, который хранится в памяти.
Управляйте, куда генератор кода помещает данные состояния в память.
Продвиньте данные состояния интерфейс модели так, чтобы другие компоненты и системы могли получить доступ к тем данным.
Улучшите удобочитаемость и трассируемость сгенерированного кода.
Для генерации кода примеры показывают, как сконфигурировать состояние блока для модели rtwdemo_configrpinterface
. Можно сконфигурировать отображения кода при помощи Code Mappings Editor или API отображений кода (coder.mapping.api.CodeMapping
).
На основе ваших требований генерации кода решите, как представлять данные состояния. По умолчанию состояния в модели появляются в сгенерированном коде как поля структуры глобальных данных под названием
. Если вы не конфигурируете индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление состояний в сгенерированном коде в целях оптимизации. Если вы конфигурируете индивидуальные настройки, решаете:model
_DW
Настроить ли настройку по умолчанию
Если необходимо получить доступ к значительному количеству состояний (например, больше чем 10), более эффективно сконфигурировать состояния с настройками по умолчанию и затем заменить те настройки для особых случаев. Если необходимо получить доступ к нескольким состояниям, которые имеют уникальный источник, именование, или требования размещения, рассматривают конфигурирование состояний индивидуально.
Как объявить и обработать данные состояния в сгенерированном коде
Как разделяют глобальные переменные
Считать входные данные из глобальных переменных, заданных во внешнем коде
Как вызывает к функциям доступа. Требует Embedded Coder®
Для получения дополнительной информации об этих опциях, смотрите Данные об Управлении и Функциональный Интерфейс в Сгенерированном коде.
Другие факторы включают ли в:
Назовите состояния в сгенерированном коде при помощи меток состояния, которые появляются в модели или при помощи идентификаторов уникального кода.
Включайте volatile
введите спецификатор в определениях глобальной переменной и объявлениях. Требует Embedded Coder. Смотрите Защищают Глобальные данные с const и энергозависимыми Спецификаторами Типа (Embedded Coder).
Поместите данные состояния в определенную область памяти. Требует Embedded Coder. Смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм (Embedded Coder).
Для списка интерфейсных требований, которые относятся к состояниям с соответствующими классами памяти и свойствами класса памяти, смотрите Choose Storage Class and Storage Class Properties для Хранилищ данных.
Требования состояния, например, модель rtwdemo_configrpinterface
:
Сохраните данные состояния блока Unit Delay для доступности, в то время как сгенерированный код выполняется.
Представляйте состояние как отдельную глобальную переменную.
Примените префиксный dtemp_
к имени переменной, которая представляет состояние.
В данном примере вы устанавливаете представление по умолчанию состояния в сгенерированном коде как глобальная переменная с static
введите спецификатор. Затем вы конфигурируете состояние блока Unit Delay, чтобы использовать класс памяти по умолчанию и идентификатор уникального кода, который включает необходимый префиксный dtemp_
. Возможность идентификатора кода позволяет вам задать идентификаторы генерации кода, не имея необходимость изменять проект модели.
Настройка генерации кода по умолчанию для состояний может уменьшать усилие по подготовке модели для генерации кода, особенно если модель имеет значительное количество состояний, что вы хотите получить доступ к тому, в то время как сгенерированный код выполняется. Выберите параметры конфигурации однажды, и генератор кода применяет те настройки к состояниям через модель. Simulink® хранит настройку по умолчанию как часть модели.
Рассмотрите конфигурирующие настройки генерации кода по умолчанию для состояний модели, если ваша модель использует несколько состояний, которые не имеют уникальных требований.
В этом примере показано, как использовать Code Mappings Editor, чтобы сконфигурировать настройки по умолчанию для состояний. Используйте редактор Отображений Кода, чтобы установить класс памяти по умолчанию для состояний в модели rtwdemo_configrpinterface к ExportedGlobal
. С той установкой класса памяти генератор кода представляет данные состояния в сгенерированном коде как глобальные переменные.
Открытая модель rtwdemo_configrpinterface. Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Simulink Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
В редакторе Отображений Кода, под Signals, избранная категория Signals, states, and internal data. Установите класс памяти по умолчанию на ExportedGlobal
.
Сохраните модель.
Можно сконфигурировать отдельные государства для генерации кода. Например, если модель имеет два состояния, которые имеют требования генерации уникального кода, конфигурируют состояния индивидуально. Или, если вы конфигурируете настройки по умолчанию для состояний, можно заменить те настройки для определенных состояний.
Если ваша модель соответствует по крайней мере одному из этих критериев, рассмотрите настройки генерации кода конфигурирования для состояний индивидуально:
Использование несколько состояний, которые имеют уникальный источник, именование или требования размещения.
Использование несколько состояний.
Имеет настройку по умолчанию для состояний, и необходимо заменить настройку для некоторых определенных состояний.
В этом примере показано, как использовать редактор Отображений Кода, чтобы применить вашу установку класса памяти по умолчанию на состояние блока Unit Delay X
в модели rtwdemo_configinterface
.
Пример также показывает, как конфигурируют идентификатор кода для того состояния. Можно задать идентификаторы генерации кода, например, для интегрирования, не изменяя проект модели.
Если вы уже не сделали так, завершитесь, шаги в Конфигурируют Настройки генерации кода По умолчанию для состояний.
В редакторе Отображений Кода кликните по вкладке Signals/States. Expand States. Класс памяти для состояния установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию модели. В данном примере настройка по умолчанию модели задает класс памяти ExportedGlobal
.
Чтобы избежать оптимизации и обеспечить генератор кода, чтобы использовать настройку по умолчанию, установите класс памяти на Model default
.
Чтобы заменить настройку по умолчанию, задайте класс памяти, который удовлетворяет требования генерации кода для того состояния.
В редакторе Отображений Кода выберите X
состояния. Установите класс памяти на
Model default: ExportedGlobal
Model default: FileScope
.
Сконфигурируйте идентификатор кода для состояния с именем, которое включает префиксный dstate_
. В редакторе Отображений Кода выберите X
состояния. В Property Inspector расширьте узел Code. Затем установите свойство Identifier класса памяти на
dstate_X
.
Сохраните модель.
Сгенерируйте и просмотрите код. Например, в rtwdemo_configrpinterface.c
, найдите определения данных для данных состояния.
real_T dstate_X;
Найдите, где данные состояния используются в функции точки входа шага.
. . . if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; } . . . dstate_X = dout_Table2; }
Чтобы автоматизировать настройку состояний для генерации кода, используйте интерфейс программирования для отображений кода. Например, при создании библиотек пользовательского блока или как части тестовой среды приложения, используйте интерфейс программирования, чтобы автоматизировать настройку данных.
В этом примере показано, как использовать интерфейс программирования, чтобы сконфигурировать состояния для модели rtwdemo_configrpinterface. Установите представление по умолчанию состояний в сгенерированном коде как глобальные переменные. Затем сконфигурируйте X
состояния из блока Unit Delay, чтобы использовать класс памяти по умолчанию и идентификатор уникального кода, который включает необходимый префиксный
dstate_
.
Откройте модель в качестве примера.
open_system('rtwdemo_configrpinterface')
Создайте объект cm
путем вызывания функции coder.mapping.api.get
. Объектно-ориентированная память настройка генерации кода для данных для модели rtwdemo_configrpinterface
.
cm = coder.mapping.api.get('rtwdemo_configrpinterface');
Сконфигурируйте настройки по умолчанию для состояний путем вызывания функции setDataDefault
. Для аргументов задайте эти значения:
Объект, возвращенный coder.mapping.api.get
InternalData
для категории по умолчанию
Имя свойства StorageClass
со значением свойства ExportedGlobal
setDataDefault(cm,'InternalData','StorageClass','ExportedGlobal');
Проверьте свою настройку по умолчанию для состояний. Издайте приказ к getDataDefault
это задает объект, возвращенный coder.mapping.api.get
и категория InternalData
. Задайте третий аргумент как свойство StorageClass
.
getDataDefault(cm,'InternalData','StorageClass') ans = 'ExportedGlobal'
Примените настройку по умолчанию для состояний, чтобы утвердить 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_configrpinterface.c
, найдите определения данных для данных состояния.
real_T dstate_X;
Найдите, где данные состояния используются в функции точки входа шага.
. . . if (mode) { output = (real_T)mp_K1 * dout_Table1; } else { output = dstate_X; } . . . dstate_X = dout_Table2; }
В зависимости от ваших требований генерации кода примите решение из этих классов памяти сконфигурировать генерацию кода для состояний блока.
Требования | Класс памяти |
---|---|
Позвольте генератору кода обработать, как представлять состояние в сгенерированном коде. Например, в целях оптимизации, генератор кода может устранить или изменить представление данных. | Автоматический (Только отдельные отображения) |
Для элементов данных, которые не могут быть оптимизированы, представляйте данные как поле стандартной структуры данных. | Значение по умолчанию (Значение по умолчанию, сопоставляющее только) |
Препятствуйте тому, чтобы оптимизация устранила устройство хранения данных для элемента данных, и используйте отображение значения по умолчанию для категории элемента данных. | Значение по умолчанию модели (Только отдельные отображения), Dictionary Default (Только отдельные отображения) |
Сгенерируйте определение глобальной переменной и объявление. | ExportedGlobal |
Сгенерируйте код, который читает из и пишет в указатель глобальной переменной или глобальной переменной, заданный вашим внешним кодом. | ImportedExtern, ImportedExternPointer |
Список доступных классов памяти может включать другие специфичные для проекта классы памяти, заданные в Словарь Embedded Coder. Если у вас есть особые требования, которым не отвечают перечисленные классы памяти, и у вас есть программное обеспечение Embedded Coder, можно задать класс памяти. Смотрите Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры (Embedded Coder).
Для отдельного государства используйте свойство класса памяти Identifier сконфигурировать имя для переменной, представляющей состояние в сгенерированном коде.
Редактор отображений кода | coder.mapping.api.CodeMapping