这是一个很重要的概念! 1.printf()的时间 在PC编程中,你可以用printf()这个函数来看变量值,而忽略它所占用的时间,(相对于3GHZ的CPU来说可以忽略),但是在嵌入式编程中,用printf()在超级终端中看变量值的时候,它的开销你要计算进去,尤其是程序对信号的捕捉到了毫秒,微秒级别的时候! 笔者曾经干过这样一件事情,用定时器函数来delay()9毫秒时间,过0.9毫秒,让里面的变量i加一,结果i等于9的时候跳出循环,而在里面多加了一句printf(),i加到了6就跳出了循环,害的我以为我的算法错了,希望大家不要走同样的弯路! 2.乘法时间 说到delay()函数,我的原型如下: void delay(double time) time = time * 12000;//得到计时次数 while(delayEnd == 0); //得到定时中断服务函数吧delayEnd 置为1 笔者用这个延迟函数想产生一个周期为26us的方波,于是delay(0.026);然后取反,结果产生了周期为100us的方波于是笔者改成了这样: void Delay(long time) while(delayEnd == 0); //得到定时中断服务函数吧delayEnd 置为1 结果产生周期为50us的方波,从两个delay()函数中我们可以看到,乘法的占用时间在程序达到us级别的时候,是必须要简化和考虑的,而每条语句的汇编条数我们也要看到,尽量精简,因为延迟函数之前,程序的条数也会占用时间,这些在PC机中从来不用考虑! |