3.3. Timers virtuais¶
A página Temporização cobriu timestamps e laços não bloqueantes orientados por time.ticks_diff(). Um timer virtual é o outro lado da moeda: o software pede ao runtime para chamar uma função em um cronograma, e o runtime invoca o callback sem que o script precise verificar o relógio por conta própria.
3.3.1. A classe machine.Timer¶
machine.Timer constrói um timer virtual. O comportamento entre portas (cross-port) exige o id especial -1; todo o resto – período, modo, callback – é definido por meio de argumentos nomeados:
from machine import Timer
def tick(t):
print("tick")
tim = Timer(-1)
tim.init(period=100, callback=tick) # 10 Hz
O callback é invocado como qualquer chamada de função comum – ele pode alocar objetos, usar print() e chamar outro código de biblioteca sem nenhuma restrição especial.
3.3.2. Periódico e disparo único¶
Dois modos estão disponíveis:
Timer.PERIODIC(o padrão). O callback dispara a cadaperiodmilissegundos, para sempre, até quedeinit()seja chamado ou o timer seja reinicializado.Timer.ONE_SHOT. O callback dispara uma vez,periodmilissegundos apósinit(), e o timer então para.
Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)
deinit() para um timer periódico e cancela qualquer callback pendente:
tim.deinit()
3.3.3. Quando recorrer a um timer¶
Os timers virtuais e o padrão de polling com ticks_diff() de Temporização resolvem o mesmo problema a partir de direções opostas. Um laço com polling verifica o relógio a cada iteração e age quando tempo suficiente se passou; um timer pede ao runtime para acordar o script quando tempo suficiente tiver passado.
Polling
ticks_diff. Tudo fica em um só lugar – o laço é dono da temporização, sem callbacks extras para acompanhar. Melhor para trabalhos curtos e bem definidos que amarram várias tarefas orientadas por tempo.Timer virtual. Move o cronograma para fora do corpo do laço. Melhor quando a tarefa periódica é independente do fluxo principal (um LED de heartbeat, uma amostragem periódica de sensor) e permite que o laço principal gaste seu tempo em outro trabalho.
Ambas as abordagens usam o mesmo relógio subjacente e oferecem a mesma precisão em períodos de um milissegundo ou mais. Nenhuma é apropriada para alternância precisa de pinos ou geração de formas de onda abaixo do milissegundo – a latência do callback é da ordem do tick do escalonador, não de nanossegundos.