从一本中文手册上看到对os_reset_interval(ticks)的描述:
“
如 果 函 数 os_wait 同 时 等 待 K_IVL 和 K_SIG 事 件 , 那 么 函 数
os_reset_interval 用来校正定时器的问题。在该条件下,如果一个信号
(K_SIG)事件让函数 os_wait 退出等待,而时间间隔没有被调整的话,
那么接下来函数 os_wait 等待一个时间间隔事件,可能就不能按要求准确
延时了。
函数 os_reset_interval 允许你去复位计时器,以致接下来函数 os_wait
的调用可以达到预期的目的。”
我在实际使用中看到的都是跟在os_wait2 (K_SIG | K_IVL, ticks)后边,但看网上有的例子没有对返回结果进行判断就直接使用了os_reset_interval(ticks)校正定时器,这就有可能对以后的os_wait2(ticks)造成影响。
根据几次实验(Keil软件debug和实际上机运行),我发现影响是这样的:
1. 如果在os_wait2 (K_SIG | K_IVL, Xticks)函数执行时已经有了SIGNAL EVENT,也就是没有触发时间间隔,那么随后的os_reset_interval(Xticks)需要使用,以后再执行os_wait2(Yticks)才能实现其准确功能。
2. 如果在os_wait2 (K_SIG | K_IVL, Xticks)函数执行时,触发并完成整个时间间隔后仍然没有收到SIGNAL EVENT信号,那么就不再需要执行os_reset_interval(Xticks),如果运行了该函数,那么随后的os_wait2(Yticks)函数实际时间间隔不是标明的Yticks,而是 (Yticks-Xticks)。需要留意。
3. 如果前面没有os_wait2 (K_SIG | K_IVL, Xticks), 而使用了os_reset_interval(Xticks), 随后的os_wait2(Yticks)函数实际延时间隔同样是(Yticks-Xticks)。 |