Skip to content

性能监视器

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

应用示例

在目录 examples/system/perfmon 下提供了一个结合性能监视器的示例。此示例初始化并执行了性能监视器,同时打印了统计信息。

高级 API 参考

头文件

API 参考

Header File

#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

#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 expected as FILE* hanle, 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 calback 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