3.3. Sanal zamanlayıcılar¶
Zamanlama sayfası, zaman damgalarını ve time.ticks_diff() ile sürülen engellemeyen döngüleri ele aldı. Bir sanal zamanlayıcı bunun diğer yüzüdür: yazılım, çalışma zamanından bir işlevi bir programa göre çağırmasını ister ve çalışma zamanı, betiğin saati kendisinin kontrol etmesine gerek kalmadan geri çağırmayı (callback) çalıştırır.
3.3.1. machine.Timer sınıfı¶
machine.Timer bir sanal zamanlayıcı oluşturur. Bağlantı noktaları (port) arası davranış, özel -1 id’sini gerektirir; diğer her şey – periyot, mod, geri çağırma – anahtar kelime argümanları aracılığıyla ayarlanır:
from machine import Timer
def tick(t):
print("tick")
tim = Timer(-1)
tim.init(period=100, callback=tick) # 10 Hz
Geri çağırma, sıradan herhangi bir işlev çağrısı gibi çalıştırılır – nesneler ayırabilir, print() kullanabilir ve herhangi bir özel kısıtlama olmadan diğer kütüphane kodunu çağırabilir.
3.3.2. Periyodik ve tek atımlı¶
İki mod mevcuttur:
Timer.PERIODIC(varsayılan). Geri çağırma,deinit()çağrılana veya zamanlayıcı yeniden başlatılana kadar herperiodmilisaniyede bir, sonsuza dek tetiklenir.Timer.ONE_SHOT. Geri çağırma,init()‘tenperiodmilisaniye sonra bir kez tetiklenir ve ardından zamanlayıcı durur.
Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)
deinit() periyodik bir zamanlayıcıyı durdurur ve bekleyen herhangi bir geri çağırmayı iptal eder:
tim.deinit()
3.3.3. Ne zaman bir zamanlayıcıya başvurmalı¶
Sanal zamanlayıcılar ve Zamanlama sayfasındaki ticks_diff() yoklama deseni, aynı problemi zıt yönlerden çözer. Yoklanan bir döngü her yinelemede saati kontrol eder ve yeterli zaman geçtiğinde harekete geçer; bir zamanlayıcı ise yeterli zaman geçtiğinde betiği uyandırmasını çalışma zamanından ister.
Yoklanan
ticks_diff. Her şey tek bir yerde kalır – döngü zamanlamaya sahiptir, takip edilecek fazladan geri çağırma yoktur. Birden fazla zaman güdümlü görevi bir araya bağlayan kısa, iyi tanımlanmış işler için en iyisidir.Sanal zamanlayıcı. Programı döngü gövdesinin dışına taşır. Periyodik görevin ana akıştan bağımsız olduğu durumlarda en iyisidir (bir kalp atışı LED’i, periyodik bir sensör örneği) ve ana döngünün zamanını başka işlere harcamasına olanak tanır.
Her iki yaklaşım da aynı temel saati kullanır ve bir milisaniye veya daha büyük periyotlarda aynı doğruluğu verir. Hiçbiri, hassas pin değiştirme veya milisaniye altı dalga formu üretimi için uygun değildir – geri çağırma gecikmesi nanosaniyeler değil, zamanlayıcı tikinin mertebesindedir.