# 性能监视器

[English]

性能监视器组件提供了多个 API，可以通过这些 API 来使用 ESP32 的内部性能计数器，分析函数和应用程序。

## 应用示例

- system/perfmon 演示了如何使用 perfmon API 来监控和分析函数性能。

## 高级 API 参考

### 头文件

- perfmon/include/perfmon.h

## API 参考

### Header File

- components/perfmon/include/xtensa_perfmon_access.h

- This header file can be included with:

  >     #include "xtensa_perfmon_access.h"

- This header file is a part of the API provided by the `perfmon` component. To declare that your component depends on `perfmon`, add the following to your CMakeLists.txt:

  >     REQUIRES perfmon

  > or

  >     PRIV_REQUIRES perfmon

### Functions

esp_err_t xtensa_perfmon_init(int id, uint16_t select, uint16_t mask, int kernelcnt, int tracelevel)

  Init Performance Monitoor.

  Initialize performance monitor register with define values

  参数:

    - id -- [in] performance counter number

    - select -- [in] select value from PMCTRLx register

    - mask -- [in] mask value from PMCTRLx register

    - kernelcnt -- [in] kernelcnt value from PMCTRLx register

    - tracelevel -- [in] tracelevel value from PMCTRLx register

  返回:

    - ESP_OK on success

    - ESP_ERR_INVALID_ARG if one of the arguments is not correct

esp_err_t xtensa_perfmon_reset(int id)

  Reset PM counter.

  Reset PM counter. Writes 0 to the PMx register.

  参数:

    id -- [in] performance counter number

  返回:

    - ESP_OK on success

    - ESP_ERR_INVALID_ARG if id out of range

void xtensa_perfmon_start(void)

  Start PM counters.

  Start all PM counters synchronously. Write 1 to the PGM register

void xtensa_perfmon_stop(void)

  Stop PM counters.

  Stop all PM counters synchronously. Write 0 to the PGM register

uint32_t xtensa_perfmon_value(int id)

  Read PM counter.

  Read value of defined PM counter.

  参数:

    id -- [in] performance counter number

  返回:

    - Performance counter value

esp_err_t xtensa_perfmon_overflow(int id)

  Read PM overflow state.

  Read overflow value of defined PM counter.

  参数:

    id -- [in] performance counter number

  返回:

    - ESP_OK if there is no overflow (overflow = 0)

    - ESP_FAIL if overflow occure (overflow = 1)

void xtensa_perfmon_dump(void)

  Dump PM values.

  Dump all PM register to the console.

### Header File

- components/perfmon/include/xtensa_perfmon_apis.h

- This header file can be included with:

  >     #include "xtensa_perfmon_apis.h"

- This header file is a part of the API provided by the `perfmon` component. To declare that your component depends on `perfmon`, add the following to your CMakeLists.txt:

  >     REQUIRES perfmon

  > or

  >     PRIV_REQUIRES perfmon

### Functions

esp_err_t xtensa_perfmon_exec(const xtensa_perfmon_config_t *config)

  Execute PM.

  Execute performance counter for dedicated function with defined parameters

  参数:

    config -- [in] pointer to the configuration structure

  返回:

    - ESP_OK if no errors

    - ESP_ERR_INVALID_ARG if one of the required parameters not defined

    - ESP_FAIL - counter overflow

void xtensa_perfmon_view_cb(void *params, uint32_t select, uint32_t mask, uint32_t value)

  Dump PM results.

  Callback to dump perfmon result to a FILE* stream specified in perfmon_config_t::callback_params. If callback_params is set to NULL, will print to stdout

  参数:

    - params -- [in] used parameters passed from configuration (callback_params). This parameter is expected to be a FILE* handle, where data will be stored. If this parameter NULL, then data will be stored to the stdout.

    - select -- [in] select value for current counter

    - mask -- [in] mask value for current counter

    - value -- [in] counter value for current counter

### Structures

struct xtensa_perfmon_config

  Performance monitor configuration structure.

  Structure to configure performance counter to measure dedicated function

  Public Members

  int repeat_count

    how much times function will be called before the callback will be repeated

  float max_deviation

    Difference between min and max counter number 0..1, 0 - no difference, 1 - not used

  void *call_params

    This pointer will be passed to the call_function as a parameter

  void (*call_function)(void *params)

    pointer to the function that have to be called

  void (*callback)(void *params, uint32_t select, uint32_t mask, uint32_t value)

    pointer to the function that will be called with result parameters

  void *callback_params

    parameter that will be passed to the callback

  int tracelevel

    trace level for all counters. In case of negative value, the filter will be ignored. If it's >=0, then the perfmon will count only when interrupt level > tracelevel. It's useful to monitor interrupts.

  uint32_t counters_size

    amount of counter in the list

  const uint32_t *select_mask

    list of the select/mask parameters

### Type Definitions

typedef struct xtensa_perfmon_config xtensa_perfmon_config_t

  Performance monitor configuration structure.

  Structure to configure performance counter to measure dedicated function

此文档对您有帮助吗？

- 反馈已收到，谢谢！
- 如果您有其他意见，欢迎填写乐鑫文档反馈表。

- 我们重视您的反馈。
- 您可以填写乐鑫文档反馈表告诉我们如何改进该文档。