本节介绍了定时器与回调函数的概念,以及如何在MicroPython中使用定时器。
定时器可以理解为一个闹钟,设定特定时间之后执行某件事情,也可以周期的执行某件事情。
定时器与utime
模块中的sleep
延时函数最大区别在于,延时函数期间,CPU就如同进入了睡眠,之后的事情只有等睡醒之后再做,这种情况我们称之为阻塞, 睡觉阻塞了cpu去完成其他的任务,必须等待CPU睡醒;而定时器是非阻塞的,在未到达定时器定时周期结束之前,CPU可以去做别的事情,等到定时器计时完毕,便会去通知CPU,CPU再去执行回调函数 (在你设定闹钟之前,你决定要在闹钟响了之后去做的事情)。
定时器每个周期都会产生一次中断,然后调用特定的 回调函数callback, 定时器中断属于内部中断.
中断
CPU的中断分为很多种,不同的中断拥有不同的优先级别。当多个中断同时发生时,计算机按照优先级来以此处理
使用import Timer
导入定时器Timer
模块
再使用TAB
按键来查看Timer
中所包含的内容:
>>> from machine import Timer
>>> Timer.
__del__ ONCE PERIODIC deinit
init isrunning
下面的宏定义用于配置network,设置对应网络模式。
宏定义 | 含义 |
---|---|
Timer.ONCE | 计时器运行一次,直到通道的配置时间到期为止 |
Timer.PERIODIC | 计时器以通道的已配置频率定期运行 |
class Time(id)
id
:任意正整数作为ID
用Timer对象的构造器函数
示例:
>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
在接下来的示例中, 构造id=1
的Timer
对象来列举Timer
对象的函数。
>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
timer.init(ticks=, type=, callback=)
。
函数说明:初始化定时器Timer
ticks
定时器执行的周期,单位是10ms
, 隔period ms 执行一次。 period取值范围: 0 < period <= 3435973836
type
定时器的执行模式,可以是Timer.PERIODIC
或Timer.ONCE
callback
: 定时器的回调函数,传入的一个参数是timer
示例:
>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
>>> timer.init(period=200, mode=Timer.PERIODIC , callback=lambda t:print("callback"))#初始化定时器,隔2s执行回调函数打印callback,一直执行
timer.deinit()
。
函数说明:释放定时器Timer
资源
定时器使用完了记得要释放定时器资源,键盘中断并不会销毁定时器,定时器会一直产生回调函数。
>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
>>> timer.init(period=2000, mode=Timer.PERIODIC , callback=lambda t:print("callback"))#初始化定时器,隔2s执行回调函数打印callback,一直执行
>>> timer.deinit()#释放资源
timer.isrunning()
。
函数说明:查看定时器Timer
是否在运行,返回运行状态,True正在运行,False不在运行。
有时定时器调用回调函数时间可能比较长,或者没有回调函数,不方便判断现在定时器是否还在运行,可以采用该函数查看。
>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
>>> timer.init(period=2000, mode=Timer.PERIODIC , callback=lambda t:print("callback"))#初始化定时器,隔2s执行回调函数打印callback,一直执行
>>> timer.isrunning()#查看定时器运行状态
True
定时打印文字
from machine import Timer
def test(args):
print("Test")
t = Timer(0)
t.init(type=Timer.PERIODIC, callback=test, ticks=3000)
t.deinit()
第一行导入machine
模块的定时类Timer
第二、三行创建回调函数,打印Test
第四创建定时器0
第五行初始化定时器
ticks=3000:定时器运行周期3s
type=Timer.PERIODIC:定时器以通道的已配置频率3s定期运行
callback=test:回调函数是创建的函数test
第六行释放定时器0资源。
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )