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 }
上一篇:ESP32-任务看门狗笔记
下一篇:ESP32高分辨率计时器笔记
- ESP32/8266固件备份方法
- upyOS:基于 MicroPython 的模块化操作系统,兼容 ESP32、RP2040 等微控制器
- ESP32与STM32哪个更适合初学者?问题解析与对比
- STM32与ESP32核心应用场景解析及PCB设计实践(深度探讨)
- ESP32与STM32:比较并非明智之举
- ESP32与STM32:性能对比分析及选型指南
- STM32与ESP32:核心差异详解
- 串口、并口、USB、UART及RS232/RS485接口与ESP32、STM32的应用解析
- ESP32音频输入-MAX4466,MAX9814,SPH0645LM4H,INMP441
- ESP32 ADF windows开发环境搭建 适配ADF到ESP32A1S
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- 意法半导体中国本地造STM32微控制器启动规模量产
- 蓝牙信道探测技术原理与开发套件实践




