You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用STM32 CubeIDE定位慢代码位置及统计函数执行耗时

STM32 CubeIDE性能排查与耗时统计方案

在STM32 CubeIDE中完全可以实现慢代码定位、单函数执行耗时统计,常用实现方案如下:

方法1:SysTick计数统计(无需额外硬件,实现简便)

  • CubeIDE默认生成的工程通常会配置SysTick定时器为1ms中断,全局计数变量为uwTick,如果需要更高统计精度,可以自行将SysTick时钟源设为内核时钟,调整计数周期到1us级别
  • 统计代码模板:
// 记录起始计数
uint32_t start_tick = uwTick;
// 执行目标测试函数
TargetTestFunction();
// 计算耗时(单位和SysTick计数周期一致,默认1ms)
uint32_t exec_cost = uwTick - start_tick;
  • 注意如果被测函数耗时超过SysTick的计数溢出周期,需要额外添加溢出判断逻辑避免统计错误

方法2:DWT数据观察点计数(高精度,适合短耗时函数)

Cortex-M3/M4/M7等内核自带DWT模块,可以实现微秒甚至纳秒级的耗时统计,无需占用额外外设资源:

  • 首先初始化DWT模块:
// 启用DWT外设时钟
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
// 清空计数寄存器
DWT->CYCCNT = 0;
// 启动内核 cycle 计数
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
  • 耗时统计逻辑:
uint32_t start_cnt = DWT->CYCCNT;
TargetTestFunction();
uint32_t end_cnt = DWT->CYCCNT;
// 换算为微秒,SystemCoreClock为内核运行频率(单位Hz)
uint32_t cost_us = (end_cnt - start_cnt) / (SystemCoreClock / 1000000);
  • 注意Cortex-M0/M0+内核无DWT模块,无法使用该方案

方法3:IDE内置性能分析工具(可视化定位慢代码)

  • 进入调试模式后,打开Analysis分类下的Performance Counters视图,启用后可以实时统计各段代码的执行占比、调用次数,直接定位运行缓慢的代码位置
  • 若芯片支持SWO Trace功能,且硬件已引出SWO引脚,可配置启用Trace统计,生成完整的函数调用耗时报表,自动按耗时排序,快速识别耗时最长的函数

统计注意事项

  • 统计耗时建议暂时关闭无关中断,避免中断抢占被测函数导致统计结果偏大
  • 多次统计取平均值可以排除偶然误差,结果更准确

内容的提问来源于stack exchange,提问作者yeuop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:06:04