Files
fastbee/firmware/esp-idf/wumei-smart-firmware/main/statistic_perfmon.c
2021-07-13 17:15:20 +08:00

65 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
* 作者kerwincui
* 时间2021-06-08
* 邮箱164770707@qq.com
* 源码地址https://gitee.com/kerwincui/wumei-smart
* author: kerwincui
* create: 2021-06-08
* email164770707@qq.com
* source:https://github.com/kerwincui/wumei-smart
******************************************************************************/
#include "statistic_perfmon.h"
static const char* TAG = "perfmon";
static void exec_test_function(void *params)
{
for (int i = 0 ; i < 100 ; i++) {
__asm__ __volatile__(" nop");
}
}
// 具有专用性能计数器的表
static uint32_t pm_check_table[] = {
XTPERF_CNT_CYCLES, XTPERF_MASK_CYCLES, // 总周期
XTPERF_CNT_INSN, XTPERF_MASK_INSN_ALL, // 总的说明
XTPERF_CNT_D_LOAD_U1, XTPERF_MASK_D_LOAD_LOCAL_MEM, // 内存读取
XTPERF_CNT_D_STORE_U1, XTPERF_MASK_D_STORE_LOCAL_MEM, // 内存写入
XTPERF_CNT_BUBBLES, XTPERF_MASK_BUBBLES_ALL &(~XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP), // 等待其他原因
XTPERF_CNT_BUBBLES, XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP, // 等待注册依赖项
XTPERF_CNT_OVERFLOW, XTPERF_MASK_OVERFLOW, // 最后一个测试周期
};
#define TOTAL_CALL_AMOUNT 200
#define PERFMON_TRACELEVEL -1 // -1将忽略跟踪级别
void perfmon_start(void)
{
ESP_LOGI(TAG, "Start");
ESP_LOGI(TAG, "Start test with printing all available statistic");
xtensa_perfmon_config_t pm_config = {};
pm_config.counters_size = sizeof(xtensa_perfmon_select_mask_all) / sizeof(uint32_t) / 2;
pm_config.select_mask = xtensa_perfmon_select_mask_all;
pm_config.repeat_count = TOTAL_CALL_AMOUNT;
pm_config.max_deviation = 1;
pm_config.call_function = exec_test_function;
pm_config.callback = xtensa_perfmon_view_cb;
pm_config.callback_params = stdout;
pm_config.tracelevel = PERFMON_TRACELEVEL;
xtensa_perfmon_exec(&pm_config);
ESP_LOGI(TAG, "Start test with user defined statistic");
pm_config.counters_size = sizeof(pm_check_table) / sizeof(uint32_t) / 2;
pm_config.select_mask = pm_check_table;
pm_config.repeat_count = TOTAL_CALL_AMOUNT;
pm_config.max_deviation = 1;
pm_config.call_function = exec_test_function;
pm_config.callback = xtensa_perfmon_view_cb;
pm_config.callback_params = stdout;
pm_config.tracelevel = PERFMON_TRACELEVEL;
xtensa_perfmon_exec(&pm_config);
ESP_LOGI(TAG, "The End");
}