x=x%y
与
if(x>y)
{
x-=y
}
哪个效率高一点 在中断中执行
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
x=x%y
与
if(x>y)
{
x-=y
}
哪个效率高一点 在中断中执行
%求模没有使用除法,而是通过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, #0x284
008aef: 9201 MOV AL, @0x1
008af0: 9300 MOV AH, @0x0
008af1: 00C08C0C FFC XAR7, U$$MOD
008af3: 9602 MOV @0x2, AL
113 if(aaa>bbb)
008af4: 9200 MOV AL, @0x0
008af5: 5401 CMP AL, @0x1
008af6: 6704 SB C$L3, HIS
115 aaa-=bbb;
008af7: 7401 SUB @0x1, AL
116 ccc = aaa;
008af8: 9201 MOV AL, @0x1
008af9: 9602 MOV @0x2, AL
你如何确定你的PWM CTR没有越过多个周期?
如果单独地想测试时间,可以使用CCS的clock功能,更简单粗暴的是在语句前后加入GPIO翻转,直接通过示波器观察。