exponenta event banner

Примеры планирования на основе времени

Оптимизация использования памяти для счетчиков времени

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

Генератор кода представляет счетчики времени как целые числа без знака. Размер слов счетчиков времени основан на установке параметра конфигурации модели Application life (days), который определяет ожидаемую максимальную продолжительность времени запуска приложения. Этот параметр можно использовать для предотвращения переполнения счетчика времени. Размер по умолчанию - 64 бита.

Количество битов, используемых счетчиком времени, зависит от значения параметра Срок службы приложения (дней). Например, если счетчик времени увеличивается со скоростью 1 кГц, чтобы избежать переполнения, счетчик имеет следующее количество битов:

  • Продолжительность жизни < 0,25 с: 8 бит

  • Срок службы < 1 мин: 16 бит

  • Продолжительность жизни < 49 дней: 32 бита

  • Продолжительность жизни > 50 дней: 64 бита

64-битный счетчик времени не переполняется в течение 590 миллионов лет.

Открыть пример модели

Открыть пример модели rtwdemo_abstime.

Модель состоит из трех подсистем SS1, SS2, и SS3. На панели Математика (Math) и Типы данных (Data Types) для параметра Срок службы приложения (дней) задано значение по умолчанию, которое равно inf.

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

  • SS1 - Тактовая частота 1 кГц. Не требует счетчика времени. Параметр типа времени выборки для порта триггера установлен в значение periodic. Прошедшее время включено как 0,001.

  • SS2 - Тактовая частота 100 Гц. Требуется счетчик времени. Исходя из продолжительности жизни 1 день, 32-разрядный счетчик сохраняет прошедшее время.

  • SS3 - Тактовая частота 0,5 Гц. Требуется счетчик времени. Исходя из продолжительности жизни 1 день, 16-битный счетчик сохраняет прошедшее время.

Моделирование модели

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

Создание кода и отчета

1. Создайте временную папку для процесса сборки и проверки.

2. Сконфигурируйте модель для генератора кода для использования целевого файла системы GRT и срока службы inf дней.

3. Создайте модель.

### Starting build procedure for: rtwdemo_abstime
### Successful completion of build procedure for: rtwdemo_abstime

Build Summary

Top model targets built:

Model            Action                       Rebuild Reason                                    
================================================================================================
rtwdemo_abstime  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 8.839s

Просмотреть созданный код

Открыть созданный исходный файл rtwdemo_abstime.c.

struct tag_RTM_rtwdemo_abstime_T {
  const char_T *errorStatus;

  /*
   * Timing:
   * The following substructure contains information regarding
   * the timing information for the model.
   */
  struct {
    uint32_T clockTick1;
    uint32_T clockTickH1;
    uint32_T clockTick2;
    uint32_T clockTickH2;
    struct {
      uint16_T TID[3];
      uint16_T cLimit[3];
    } TaskCounters;
  } Timing;
};

/* Block states (default storage) */
extern DW_rtwdemo_abstime_T rtwdemo_abstime_DW;

/* Zero-crossing (trigger) state */
extern PrevZCX_rtwdemo_abstime_T rtwdemo_abstime_PrevZCX;

/* External inputs (root inport signals with default storage) */
extern ExtU_rtwdemo_abstime_T rtwdemo_abstime_U;

/* External outputs (root outports fed by signals with default storage) */
extern ExtY_rtwdemo_abstime_T rtwdemo_abstime_Y;

/* Model entry point functions */
extern void rtwdemo_abstime_initialize(void);
extern void rtwdemo_abstime_step0(void);
extern void rtwdemo_abstime_step1(void);
extern void rtwdemo_abstime_step2(void);
extern void rtwdemo_abstime_step(int_T tid);
extern void rtwdemo_abstime_terminate(void);

/* Real-time Model object */
extern RT_MODEL_rtwdemo_abstime_T *const rtwdemo_abstime_M;

/*-
 * The generated code includes comments that allow you to trace directly
 * back to the appropriate location in the model.  The basic format
 * is <system>/block_name, where system is the system number (uniquely
 * assigned by Simulink) and block_name is the name of the block.
 *
 * Use the MATLAB hilite_system command to trace the generated code back
 * to the model.  For example,
 *
 * hilite_system('<S3>')    - opens system 3
 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
 *
 * Here is the system hierarchy for this model
 *
 * '<Root>' : 'rtwdemo_abstime'
 * '<S1>'   : 'rtwdemo_abstime/SS1'
 * '<S2>'   : 'rtwdemo_abstime/SS2'
 * '<S3>'   : 'rtwdemo_abstime/SS3'
 */
#endif                                 /* RTW_HEADER_rtwdemo_abstime_h_ */

Четыре 32-разрядных беззнаковых целых числа, clockTick1 , clockTickH1 , clockTick2 , и clockTickH2 - счетчики для хранения прошедшего времени подсистем SS2 и SS3.

Включить оптимизацию и регенерировать код

1. Реконфигурируйте модель, чтобы установить срок службы 1 день.

2. Создайте модель.

### Starting build procedure for: rtwdemo_abstime
### Successful completion of build procedure for: rtwdemo_abstime

Build Summary

Top model targets built:

Model            Action                       Rebuild Reason                     
=================================================================================
rtwdemo_abstime  Code generated and compiled  Incremental checksum has changed.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 5.6438s

Просмотр восстановленного кода

struct tag_RTM_rtwdemo_abstime_T {
  const char_T *errorStatus;

  /*
   * Timing:
   * The following substructure contains information regarding
   * the timing information for the model.
   */
  struct {
    uint32_T clockTick1;
    uint16_T clockTick2;
    struct {
      uint16_T TID[3];
      uint16_T cLimit[3];
    } TaskCounters;
  } Timing;
};

/* Block states (default storage) */
extern DW_rtwdemo_abstime_T rtwdemo_abstime_DW;

/* Zero-crossing (trigger) state */
extern PrevZCX_rtwdemo_abstime_T rtwdemo_abstime_PrevZCX;

/* External inputs (root inport signals with default storage) */
extern ExtU_rtwdemo_abstime_T rtwdemo_abstime_U;

/* External outputs (root outports fed by signals with default storage) */
extern ExtY_rtwdemo_abstime_T rtwdemo_abstime_Y;

/* Model entry point functions */
extern void rtwdemo_abstime_initialize(void);
extern void rtwdemo_abstime_step0(void);
extern void rtwdemo_abstime_step1(void);
extern void rtwdemo_abstime_step2(void);
extern void rtwdemo_abstime_step(int_T tid);
extern void rtwdemo_abstime_terminate(void);

/* Real-time Model object */
extern RT_MODEL_rtwdemo_abstime_T *const rtwdemo_abstime_M;

/*-
 * The generated code includes comments that allow you to trace directly
 * back to the appropriate location in the model.  The basic format
 * is <system>/block_name, where system is the system number (uniquely
 * assigned by Simulink) and block_name is the name of the block.
 *
 * Use the MATLAB hilite_system command to trace the generated code back
 * to the model.  For example,
 *
 * hilite_system('<S3>')    - opens system 3
 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
 *
 * Here is the system hierarchy for this model
 *
 * '<Root>' : 'rtwdemo_abstime'
 * '<S1>'   : 'rtwdemo_abstime/SS1'
 * '<S2>'   : 'rtwdemo_abstime/SS2'
 * '<S3>'   : 'rtwdemo_abstime/SS3'
 */
#endif                                 /* RTW_HEADER_rtwdemo_abstime_h_ */

Новая настройка параметра Срок службы приложения (дней) предписывает генератору кода выделять меньше памяти для счетчиков времени. Регенерированный код включает в себя:

  • 32-разрядное целое число без знака, clockTick1, для хранения прошедшего времени задачи для SS2

  • 16-битное целое число без знака, clockTick2, для хранения прошедшего времени задачи для SS3

Связанная информация

Односкоростное моделирование (голая плата, без ОС)

В этой модели показана генерация кода для односкоростной дискретно-временной модели, настроенной для цели с голой платой (без операционной системы).

Открыть пример модели

Открыть пример модели rtwdemo_srbb.

open_system('rtwdemo_srbb')

Модель использует один образец времени и настроена на отображение цветов образца времени при появлении диаграммы обновления. Блоки ввода In1_1s и In2_1s задают 1-секундное время выборки, которое принудительно устанавливается параметром конфигурации модели Periodic sample time constraint.

Модель сконфигурирована для отображения времени образца с цветовым кодированием с аннотациями. Чтобы увидеть их, после открытия модели обновите схему, нажав клавиши Ctrl + D. Чтобы отобразить легенду, нажмите клавиши CTRL + J. Поскольку модель сконфигурирована с одним временем выборки, она отображается красным цветом, который представляет самое быстрое время дискретной выборки в модели.

Многоскоростное моделирование в однозадачном режиме (голая плата, без ОС)

В этой модели показан код, сгенерированный для многоскоростной дискретно-временной модели, настроенной для однозадачной работы на голой плате (без операционной системы).

Открыть пример модели

Открыть пример модели rtwdemo_mrstbb.

open_system('rtwdemo_mrstbb')

Модель содержит два примера времени. Блок 1 ввода и блок 2 ввода задают 1-секундное и 2-секундное время выборки, соответственно, которые принудительно задаются параметром конфигурации модели Periodic sample time limited. Решатель настроен для однозадачной операции. Таким образом, блоки перехода скорости не включаются между блоками, выполняющимися в разное время выборки, потому что не произойдет вытеснения.

Модель сконфигурирована для отображения времени образца с цветовым кодированием с аннотациями. Чтобы увидеть их, после открытия модели обновите схему, нажав клавиши Ctrl + D. Чтобы отобразить легенду, нажмите клавиши CTRL + J. Красный цвет представляет самое быстрое время дискретной выборки в модели, зеленый цвет - второе самое быстрое, а желтый цвет - смешанное время выборки.

Многоскоростное моделирование в многозадачном режиме (голая плата, без ОС)

В этой модели показан код, созданный для многоскоростной дискретно-временной модели, настроенной для многозадачного целевого устройства с голой платой (без операционной системы).

Открыть пример модели

Открыть пример модели rtwdemo_mrmtbb.

open_system('rtwdemo_mrmtbb')

Изучение примера модели

Модель содержит два примера времени. Блок 1 ввода и блок 2 ввода задают 1-секундное и 2-секундное время выборки, соответственно, которые принудительно задаются параметром конфигурации модели Periodic sample time limited. Решатель настроен для многозадачной работы, что означает, что требуется блок перехода скорости, чтобы гарантировать, что целостность данных принудительно выполняется, когда 1-секундная задача прерывает 2-секундную задачу. Соответствующие переходы скорости всегда выполняются Simulink и Simulink Coder. Эта модель определяет явный блок перехода скорости. В качестве альтернативы этот блок можно автоматически вставить с помощью параметра конфигурации модели Simulink Automatically handle rate transfer for data transfer.

Модель сконфигурирована так, чтобы отображать цвета времени образца после обновления диаграммы. Чтобы увидеть их, после открытия модели обновите схему, нажав клавиши Ctrl + D. Чтобы отобразить легенду, нажмите клавиши CTRL + J. Красный цвет представляет самое быстрое время дискретной выборки в модели, зеленый цвет - второе самое быстрое, а желтый цвет - смешанное время выборки.

Допущения переноса данных

Основа работы для передачи данных между задачами:

  • Переходы данных происходят между одной задачей чтения и одной задачей записи.

  • Считывание или запись переменной размера байта является атомарным.

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

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

  • Задачи выполняются на одном процессоре. Квантирование времени не допускается.

  • Процессы не завершаются аварийно и не перезапускаются (особенно во время передачи данных между задачами)

Многоскоростное моделирование в многозадачном режиме (ОС VxWorks ®

)

В этом примере создается код для многоскоростной дискретно-временной модели, настроенной для многозадачной операционной системы (VxWorks ®). Модель содержит два примера времени. Блок 1 ввода и блок 2 ввода задают 1-секундное и 2-секундное время выборки, соответственно, которые принудительно задаются параметром конфигурации модели Periodic sample time limited. Решатель настроен на многозадачную работу, что означает, что для обеспечения целостности данных требуется блок Rate Transition, когда 1-секундная задача прерывает 2-секундную задачу. Simulink ® и генератор кода обеспечивают правильный переход скорости. Эта модель определяет явный блок Rate Transition. Можно также поручить Simulink ® вставить этот блок, задав параметр конфигурации модели Автоматически обрабатывать переход скорости для передачи данных.

Модель сконфигурирована для отображения времени образца с цветовым кодированием с аннотациями. Чтобы увидеть их, после открытия модели обновите схему, нажав клавиши Ctrl + D. Чтобы отобразить легенду, нажмите клавиши CTRL + J. Красный цвет представляет самое быстрое время дискретной выборки в модели, зеленый цвет - второе самое быстрое, а желтый цвет - смешанное время выборки.

Пример модели

model = 'rtwdemo_mrmtos';
open_system(model);

Детерминизм торговли и целостность данных для повышения производительности системы

Эта модель показывает различия в режимах работы блока Rate Transition при использовании в многоскоростной многозадачной модели. Гибкие параметры блока «Rate Transition» позволяют выбрать режим, наиболее подходящий для приложения. Для повышения производительности системы можно использовать уровни детерминизма и целостности данных.

Режимы работы блока перехода скорости

Обеспечить целостность данных и детерминизм (DetAndInteg): Данные передаются таким образом, что все байты данных для сигнала (включая все элементы широкого сигнала) находятся с одного шага времени. Кроме того, гарантируется, что относительное время выборки (задержка), с которого данные передаются с одной скорости на другую, всегда одинаково. Используется только код ANSI-C, защита «критического участка» целевого объекта не требуется.

Обеспечение целостности (IntegOnly): данные передаются таким образом, что все байты данных для сигнала (включая все элементы широкого сигнала) находятся на одном шаге времени. Однако от одного переноса данных к следующему относительное время выборки (задержка), для которого данные передаются, может изменяться. В этом режиме код для чтения/записи данных выполняется чаще, чем в режиме DetandInt. В худшем случае задержка эквивалентна режиму DetandInt, но задержка может быть меньше, что важно для некоторых приложений. Кроме того, этот режим поддерживает передачу данных на асинхронные скорости/из них, которые режим DetandInt не может поддерживать. Используется только код ANSI-C, защита «критического участка» целевого объекта не требуется.

Операции непротиворечивости данных не выполняются (нет): в этом случае блок Rate Transition не генерирует код. Этот режим приемлем в некоторых приложениях, где гарантирован атомарный доступ скалярных типов данных и когда относительные временные значения данных не важны. Этот режим не приводит к задержке.

Допущения переноса данных

Основа работы для передачи данных между задачами:

  • Переходы данных происходят между одной задачей чтения и одной задачей записи.

  • Считывание или запись переменной размера байта является атомарным.

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

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

  • Все задачи выполняются на одном процессоре. Квантирование времени не допускается.

  • Процессы не завершаются сбоем/перезапуском (особенно во время передачи данных между задачами)

Модель rtwdemo_ratetrans

open_system('rtwdemo_ratetrans')

Модель rtwdemo_ratetrans показывает различия в режимах работы следующих блоков Rate Transition.

Блок изменения скорости DetAndIntegF2S

Детерминизм и целостность данных (быстрый или медленный переход):

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

  • Данные записываются на выход с более низкой скоростью, но выполняются в контексте более высокой скорости.

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

Блок изменения скорости DetAndIntegS2F

Детерминизм и целостность данных (медленный и быстрый переход):

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

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

  • Внутренний буфер записывается с более низкой скоростью и в контексте более низкой скорости.

  • Данные, которые видит быстрая скорость, всегда задерживаются, т.е. данные поступают с предыдущего шага медленного кода скорости.

Блок изменения скорости IntegOnlyF2S

Только целостность данных (быстрый или медленный переход):

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

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

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

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

Блок изменения скорости IntegOnlyS2F

Только целостность данных (медленный или быстрый переход):

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

  • Один из 2 буферов всегда копируется на выход с более высокой скоростью.

  • Один из 2 буферов записывается на более низкой скорости, и в контексте более низкой скорости, затем активный буфер переключается.

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

Блок изменения скорости NoneF2S

При отказе от детерминизма и целостности данных для блока Rate Transition не генерируется код.

Блок изменения скорости NoneS2F

При отказе от детерминизма и целостности данных для блока Rate Transition не генерируется код.

bdclose('rtwdemo_ratetrans');

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