3.3. Bộ định thời ảo¶
Trang Định thời đề cập đến timestamp và vòng lặp không chặn được điều khiển bởi time.ticks_diff(). Bộ định thời ảo là mặt ngược lại: phần mềm yêu cầu runtime gọi một hàm theo lịch trình, và runtime gọi hàm gọi lại mà không cần tập lệnh tự kiểm tra đồng hồ.
3.3.1. Lớp machine.Timer¶
machine.Timer tạo một bộ định thời ảo. Hành vi xuyên cổng yêu cầu id đặc biệt -1; mọi thứ khác -- period, mode, callback -- được đặt qua đối số từ khóa:
from machine import Timer
def tick(t):
print("tick")
tim = Timer(-1)
tim.init(period=100, callback=tick) # 10 Hz
Hàm gọi lại được gọi như bất kỳ lời gọi hàm thông thường nào -- nó có thể phân bổ đối tượng, print() và gọi code thư viện khác mà không có bất kỳ hạn chế đặc biệt nào.
3.3.2. Định kỳ và một lần¶
Hai chế độ có sẵn:
Timer.PERIODIC(mặc định). Hàm gọi lại kích hoạt mỗiperiodmili giây, mãi mãi, cho đến khideinit()được gọi hoặc bộ định thời được khởi tạo lại.Timer.ONE_SHOT. Hàm gọi lại kích hoạt một lần,periodmili giây sauinit(), và bộ định thời dừng lại.
Timer(-1).init(mode=Timer.ONE_SHOT, period=2000, callback=fire)
deinit() dừng bộ định thời định kỳ và hủy bất kỳ hàm gọi lại đang chờ nào:
tim.deinit()
3.3.3. Khi nào nên dùng bộ định thời¶
Bộ định thời ảo và mẫu thăm dò ticks_diff() từ Định thời giải quyết cùng một vấn đề từ các hướng ngược nhau. Vòng lặp được thăm dò kiểm tra đồng hồ mỗi lần lặp và hành động khi đủ thời gian đã trôi qua; bộ định thời yêu cầu runtime đánh thức tập lệnh khi đủ thời gian đã trôi qua.
Thăm dò
ticks_diff. Mọi thứ nằm ở một nơi -- vòng lặp sở hữu định thời, không có thêm hàm gọi lại nào cần theo dõi. Tốt nhất cho công việc ngắn, xác định rõ ràng, gắn kết nhiều tác vụ theo thời gian.Bộ định thời ảo. Chuyển lịch trình ra khỏi thân vòng lặp. Tốt nhất khi tác vụ định kỳ độc lập với luồng chính (LED nhịp đập, mẫu cảm biến định kỳ) và để vòng lặp chính dành thời gian cho công việc khác.
Cả hai phương pháp đều sử dụng cùng một đồng hồ cơ bản và cho độ chính xác tương tự ở các chu kỳ một mili giây trở lên. Không phương pháp nào phù hợp cho việc chuyển đổi chân (pin) chính xác hoặc tạo dạng sóng dưới mili giây -- độ trễ hàm gọi lại ở cùng bậc với tick bộ lập lịch, không phải nano giây.