学过单片机的同学应该清楚,我们在编写传感器驱动时,需要用到高精度的定时器、延时等功能,wiringpi提供了一组函数来实现这些功能,这些函数分别是:
micros() #返回当前的微秒数,这个数在调用wiringPiSetup()后被清零并重新计时
millis() #返回当前的毫秒数,同上,这个数在调用wiringPiSetup()后被清零并重新计时
delayMicroseconds() #高精度微秒延时
delay() #毫秒延时。
python相对于C,一个很大的问题就是执行速度慢,所以指令执行速度不可忽视,我们可以用micos函数来检测指令执行时间,用来避免实际使用中遇到的坑,请看以下代码:
import wiringpi2 as gpio for i in range(5):
t1=gpio.micros()
t2=gpio.micros()
print(t2-t1)
连续调用两次micros,然后打印出差值,运行结果如下:
[root@RasPi ~/testcode]# python testus.py
我们看到第一次的结果明显比以后的结果要大,多了接近10微秒,一般的程序来说,这无关紧要,要是要求更高,可以把代码改成这个样子:
import wiringpi2 as gpio for i in range(5):
t1=gpio.micros()
t1=gpio.micros()
t2=gpio.micros()
print(t2-t1)
运行结果如下:
[root@RasPi ~/testcode]# python testus.py
3
3
3
3
2
基本一致了再看以下代码:
import wiringpi2 as gpio for i in range(5):
t1=gpio.micros()
t1=gpio.micros()
gpio.delayMicroseconds(10)
t2=gpio.micros()
print(t2-t1)
延时10us,结果如下:
[root@RasPi ~/testcode]# python testus.py
21
21
18
18
18
减去两次调用micros()之间的5us左右的延时,实际延时10us会有5us左右的延时。
import wiringpi2 as gpio for i in range(5):
t1=gpio.micros()
t1=gpio.micros()
for i in range(100):
pass
t2=gpio.micros()
print(t2-t1)
结果:
[root@RasPi ~/testcode]# python testus.py
59
69
66
61
62
也就是,普通几条指令,每条延时在1us以下,可以基本忽略,调用函数,则有5-10us左右的延时,在编写程序时,应充分考虑这一点。若在时序里有复杂的代码段,则最好能实际测试一下,看看执行时间对我们的时序有什么影响。