3.3. Virtuális időzítők¶
A Időzítés oldal az időbélyegekkel és a time.ticks_diff() által vezérelt nem blokkoló ciklusokkal foglalkozott. Egy virtuális időzítő ennek a fonákja: a szoftver megkéri a futtatókörnyezetet, hogy egy ütemezés szerint hívjon meg egy függvényt, és a futtatókörnyezet meghívja a visszahívást anélkül, hogy a szkriptnek magának kellene az órát ellenőriznie.
3.3.1. A machine.Timer osztály¶
A machine.Timer egy virtuális időzítőt hoz létre. A portok közötti egységes viselkedés a speciális -1 id-t igényli; minden mást – periódus, üzemmód, visszahívás – kulcsszavas argumentumokon keresztül állítunk be:
from machine import Timer
def tick(t):
print("tick")
tim = Timer(-1)
tim.init(period=100, callback=tick) # 10 Hz
A visszahívás úgy hívódik meg, mint bármely közönséges függvényhívás – objektumokat foglalhat le, használhatja a print() függvényt, és bármilyen különleges megkötés nélkül hívhat más könyvtári kódot.
3.3.2. Periodikus és egylövetű¶
Két üzemmód áll rendelkezésre:
Timer.PERIODIC(az alapértelmezett). A visszahívás mindenperiodezredmásodpercben kiváltódik, örökké, amíg adeinit()meghívásra nem kerül, vagy az időzítőt újra nem inicializálják.Timer.ONE_SHOT. A visszahívás egyszer váltódik ki,periodezredmásodperccel azinit()után, majd az időzítő leáll.
Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)
A deinit() leállít egy periodikus időzítőt, és törli a függőben lévő visszahívásokat:
tim.deinit()
3.3.3. Mikor nyúljunk időzítőhöz¶
A virtuális időzítők és a Időzítés oldalon szereplő ticks_diff() lekérdezési minta ugyanazt a problémát oldja meg ellentétes irányból. Egy lekérdezett ciklus minden iterációban ellenőrzi az órát, és cselekszik, amikor elegendő idő telt el; egy időzítő megkéri a futtatókörnyezetet, hogy ébressze fel a szkriptet, amikor elegendő idő telt el.
Lekérdezett
ticks_diff. Minden egy helyen marad – a ciklus birtokolja az időzítést, nincs nyilvántartandó extra visszahívás. A legjobb rövid, jól meghatározott munkához, amely több idővezérelt feladatot köt össze.Virtuális időzítő. Kiviszi az ütemezést a ciklus törzséből. A legjobb, amikor a periodikus feladat független a fő folyamattól (egy szívverés-LED, egy periodikus érzékelő-mintavétel), és lehetővé teszi, hogy a fő ciklus az idejét más munkára fordítsa.
Mindkét megközelítés ugyanazt az alapul szolgáló órát használja, és egy ezredmásodperces vagy hosszabb periódusoknál ugyanazt a pontosságot adja. Egyik sem alkalmas pontos lábállapot-váltáshoz vagy ezredmásodperc alatti hullámforma-előállításhoz – a visszahívás késleltetése az ütemező tickjének nagyságrendjébe esik, nem nanoszekundumokéba.