3.3. Virtuaaliset ajastimet¶
Ajoitus -sivu käsitteli aikaleimoja ja estämättömiä silmukoita, joita time.ticks_diff() ohjaa. Virtuaalinen ajastin on kääntöpuoli: ohjelmisto pyytää ajonaikaa kutsumaan funktiota aikataulun mukaan, ja ajonaika kutsuu takaisinkutsun ilman, että skriptin tarvitsee itse tarkistaa kelloa.
3.3.1. machine.Timer-luokka¶
machine.Timer rakentaa virtuaalisen ajastimen. Porttien välinen käyttäytyminen vaatii erityisen id:n -1; kaikki muu – jakso, tila, takaisinkutsu – asetetaan avainsana-argumenteilla:
from machine import Timer
def tick(t):
print("tick")
tim = Timer(-1)
tim.init(period=100, callback=tick) # 10 Hz
Takaisinkutsu kutsutaan kuten mikä tahansa tavallinen funktiokutsu – se voi varata olioita, print() ja kutsua muuta kirjastokoodia ilman erityisrajoituksia.
3.3.2. Jaksollinen ja kertalaukaisu¶
Kaksi tilaa on käytettävissä:
Timer.PERIODIC(oletus). Takaisinkutsu laukeaaperiodmillisekunnin välein, ikuisesti, kunnesdeinit()-metodia kutsutaan tai ajastin alustetaan uudelleen.Timer.ONE_SHOT. Takaisinkutsu laukeaa kerran,periodmillisekuntiainit()-kutsun jälkeen, ja ajastin pysähtyy sitten.
Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)
deinit() pysäyttää jaksollisen ajastimen ja peruuttaa mahdollisen vireillä olevan takaisinkutsun:
tim.deinit()
3.3.3. Milloin käyttää ajastinta¶
Virtuaaliset ajastimet ja ticks_diff() -pollausmalli sivulta Ajoitus ratkaisevat saman ongelman vastakkaisista suunnista. Pollattu silmukka tarkistaa kellon joka iteraatiossa ja toimii, kun riittävästi aikaa on kulunut; ajastin pyytää ajonaikaa herättämään skriptin, kun riittävästi aikaa on kulunut.
Pollattu
ticks_diff. Kaikki pysyy yhdessä paikassa – silmukka omistaa ajoituksen, eikä ole ylimääräisiä takaisinkutsuja seurattavana. Paras lyhyelle, hyvin määritellylle työlle, joka sitoo yhteen useita aikaohjattuja tehtäviä.Virtuaalinen ajastin. Siirtää aikataulun pois silmukan rungosta. Paras, kun jaksollinen tehtävä on riippumaton päävirrasta (sykäys-LED, jaksollinen sensorinäyte) ja antaa pääsilmukan käyttää aikansa muuhun työhön.
Molemmat lähestymistavat käyttävät samaa taustalla olevaa kelloa ja antavat saman tarkkuuden millisekunnin tai sitä pidemmillä jaksoilla. Kumpikaan ei sovi tarkkaan nastan tilanvaihtoon tai alle millisekunnin aaltomuodon tuottamiseen – takaisinkutsun viive on aikatauluttajan tikin luokkaa, ei nanosekuntien.