单片机
返回首页

ESP32-性能监控笔记

2025-09-10 来源:cnblogs

基于ESP-IDF4.1


 1 #include

 2 #include

 3 #include

 4 #include 'esp_timer.h'

 5 #include 'esp_log.h'

 6 #include 'esp_sleep.h'

 7 #include 'sdkconfig.h'

 8 

 9 #include 'perfmon.h'

10 

11 static const char* TAG = 'example';

12 

13 static void exec_test_function(void *params)

14 {

15     for (int i = 0 ; i < 100 ; i++) {

16         __asm__ __volatile__('   nop');

17     }

18 }

19 

20 //具有专用性能计数器的表

21 static uint32_t pm_check_table[] = {

22     XTPERF_CNT_CYCLES, XTPERF_MASK_CYCLES, // 周期合计

23     XTPERF_CNT_INSN, XTPERF_MASK_INSN_ALL, // 指令合计

24     XTPERF_CNT_D_LOAD_U1, XTPERF_MASK_D_LOAD_LOCAL_MEM, // 内存读取

25     XTPERF_CNT_D_STORE_U1, XTPERF_MASK_D_STORE_LOCAL_MEM, // 内存写入

26     XTPERF_CNT_BUBBLES, XTPERF_MASK_BUBBLES_ALL &(~XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP),  // 等待其他原因

27     XTPERF_CNT_BUBBLES, XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP,           // 等待寄存器依赖

28     XTPERF_CNT_OVERFLOW, XTPERF_MASK_OVERFLOW,               // 最后一个测试周期

29 };

30 

31 #define TOTAL_CALL_AMOUNT 200

32 #define PERFMON_TRACELEVEL -1 // -1 - 忽略跟踪级别

33 

34 void app_main(void)

35 {

36     ESP_LOGI(TAG, 'Start');

37     ESP_LOGI(TAG, 'Start test with printing all available statistic');

38     xtensa_perfmon_config_t pm_config = {};

39     pm_config.counters_size = sizeof(xtensa_perfmon_select_mask_all) / sizeof(uint32_t) / 2;

40     pm_config.select_mask = xtensa_perfmon_select_mask_all;

41     pm_config.repeat_count = TOTAL_CALL_AMOUNT;

42     pm_config.max_deviation = 1;

43     pm_config.call_function = exec_test_function;

44     pm_config.callback = xtensa_perfmon_view_cb;

45     pm_config.callback_params = stdout;

46     pm_config.tracelevel = PERFMON_TRACELEVEL;

47     xtensa_perfmon_exec(&pm_config);

48 

49     ESP_LOGI(TAG, 'Start test with user defined statistic');

50     pm_config.counters_size = sizeof(pm_check_table) / sizeof(uint32_t) / 2;

51     pm_config.select_mask = pm_check_table;

52     pm_config.repeat_count = TOTAL_CALL_AMOUNT;

53     pm_config.max_deviation = 1;

54     pm_config.call_function = exec_test_function;

55     pm_config.callback = xtensa_perfmon_view_cb;

56     pm_config.callback_params = stdout;

57     pm_config.tracelevel = PERFMON_TRACELEVEL;

58 

59     xtensa_perfmon_exec(&pm_config);

60 

61     ESP_LOGI(TAG, 'The End');

62 }


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 便携式混音器

  • 18W乙类音频放大器

  • 6晶体管H桥

  • USB LED调光器

  • USB自供电声卡

  • AVR LCD温度计—LM35

    相关电子头条文章