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

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

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