可使MCU达到最大运行功耗的代码类型问询 含Renesas RX系列测试需求
思路可行性判断
你的思路完全正确。瑞萨官方 datasheet 标注的运行态最大功耗是特定测试条件下的典型值,而你明确设备不会进入睡眠模式,仅需要测试运行态的最大功耗,通过跑满核心负载再实测电流的方式得到的结果,比官方参数更贴合你的实际使用场景。
测试前的注意事项
- 测试时将MCU主频拉到对应型号的最高值:RX72N最高支持240MHz,RX651最高支持120MHz,不要降频运行,否则测得的功耗会低于真实最大值
- 所有实际产品中会用到的外设都要开启并处于工作状态,如果需要测芯片的极限最大功耗,可以把芯片所有外设的时钟都打开,同时将闲置I/O配置为推挽输出翻转状态,进一步拉高功耗
- 特别注意:给benchmark的运算结果加上
volatile修饰,或者将运算结果输出到某个外设(比如I/O口、DAC),避免编译器把无输出的运算代码判定为无用代码直接优化掉,导致CPU实际空转,测得的功耗偏低
推荐的benchmark代码类型
要让MCU功耗达到峰值,需要同时拉满核心、总线、外设三个部分的负载,对应代码可以分为三类:
- 核心运算负载代码
连续调用CPU核心的运算单元,带FPU的型号优先跑浮点运算,比如三角函数、矩阵乘法、开方等,把核心算力拉满,示例代码如下:
volatile float cal_result = 0.0f; void run_cpu_full_load(void) { float a = 3.1415f, b = 2.7182f; while(1) { cal_result += a * b + sinf(cal_result) * cosf(b) - sqrtf(a + cal_result); // 可选:翻转I/O口,既避免代码被优化,也可以用示波器监测代码是否正常运行 // HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); } }
- 总线存储负载代码
连续对RAM、内置Flash做随机读写操作,让总线和存储模块也进入高负载状态,进一步拉高整体功耗 - 外设负载代码
让所有开启的外设都处于连续工作状态,比如ADC连续采样、CAN接口连续发送报文、SPI连续收发数据、PWM连续输出等,模拟实际工作中外设的最大负载
可用的开源benchmark
你可以直接使用CoreMark作为核心负载代码,这是嵌入式领域通用的CPU性能跑分工具,本身的设计就是让CPU处于满负载运行状态,不需要太多修改就能直接使用。如果要测极限最大功耗,记得在CoreMark运行的同时,打开所有需要用到的外设并让它们也处于工作状态即可。
内容的提问来源于stack exchange,提问作者Woody Wu
相关产品推荐
相关产品推荐

