在此链接上
https://os.mbed.com/handbook/Ticker
它说:“请注意,计时器基于32位int微秒计数器,因此最多只能计时2 ^ 31-1微秒,即30分钟。它们的设计时间介于微秒和秒之间。对于更长的时间,您应该考虑time()/实时时钟。”
我的问题是,这30分钟的限制仅适用于间隔为1 us的情况?像这样
flipper.attach_us(&flip,1);
如果我必须每1 ms调用一次中断,这是否意味着计数器现在最多可以达到30000分钟?像这样
flipper.attach_us(&flip,1000);
另外,计时器填满后会自己自行清除并重新启动,还是通过错误进行处理。
答案 0 :(得分:0)
这是函数声明:
void attach_us (Callback< void()> func, us_timestamp_t t)
“ t”是两次通话之间的时间。在链接页面(https://os.mbed.com/handbook/Ticker)中发现的警告说,由于“ t”是32位int,因此可以设置的最大间隔时间约为30分钟。 (我认为它是最新API中的64位。https://os.mbed.com/docs/latest/reference/ticker.html。)
当计时器达到“ t”指定的值时,它将溢出并触发回调功能。重复该操作,直到您将其分离。
如果间隔为1毫秒,则无需担心最大30分钟的限制。
答案 1 :(得分:0)
您要链接的页面较旧。计时器不再是32位,而是现在是64位。因此这不再是问题。在https://os.mbed.com/docs/latest/reference/ticker.html上查看Ticker
文档的最新版本。