x=x%y
与
if(x>y)
{
x-=y
}
哪个效率高一点 在中断中执行
10#:
%求模没有使用除法,而是通过repeat多次减法来实现的,原理上与你的方法一样,但由于它是固定次数,时间上要多一些。
你可以尝试看一下指令集里里有关%运算的汇编代码,或者自己简单测试一下,我这看到的是对于Unit16的数,使用clock计算,%需要34个时钟,而后者大概10来个,应该更少,因为我多赋了一次值。
下面是对应的汇编代码供参考:
Uint16 aaa;Uint16 bbb;Uint16 ccc;
ccc = aaa%bbb;
if(aaa>bbb) { aaa-=bbb; ccc = aaa; }
111 ccc = aaa%bbb; C$DW$L$_main$2$E, C$L2:008aed: 761F0284 MOVW DP, #0x284008aef: 9201 MOV AL, @0x1008af0: 9300 MOV AH, @0x0008af1: 00C08C0C FFC XAR7, U$$MOD008af3: 9602 MOV @0x2, AL113 if(aaa>bbb)008af4: 9200 MOV AL, @0x0008af5: 5401 CMP AL, @0x1008af6: 6704 SB C$L3, HIS115 aaa-=bbb;008af7: 7401 SUB @0x1, AL116 ccc = aaa;008af8: 9201 MOV AL, @0x1008af9: 9602 MOV @0x2, AL
x=x%y
与
if(x>y)
{
x-=y
}
哪个效率高一点 在中断中执行
xiangjun quan:
回复 10#:
我为什么我测试出来的时间 %所用的时间更短一下,我用的PWM CTR的值计算的时间