文章预览
最近在测试一个M0+ MCU的运行功耗,测试代码采用如下最简单的方式,即main函数里只跑一个while(1)空循环,测试出来的电流是1.11mA,使用的IDE为KEIL MDK,优化等级为0 当我在while(1)的前面插入3条NOP指令,测出来的电流却变成了0.89mA。 这是怎么回事?是测量误差,还是事实就是如此?这可是足足差了200多uA啊,为此我又做了如下几个对比实验。 测试条件 功耗 优化等级0,while(1)前不加NOP 1.11mA 优化等级0,while(1)前插入1个NOP 0.90mA 优化等级0,while(1)前插入2个NOP 1.11mA 优化等级0,while(1)前插入3个NOP 0.89mA 优化等级0,while(1)前插入4个NOP 1.12mA 优化等级0,while(1)前插入5个NOP 0.91mA 优化等级0,while(1)前插入6个NOP 1.11mA 优化等级0,while(1)前插入7个NOP 0.88mA 优化等级0,while(1)前插入8个NOP 1.11mA 上述实验可以看到明显的规律,只要while(1)前插入的NOP是奇数时功耗就相对小
………………………………