從一本中文手冊上看到對os_reset_interval(ticks)的描述:
“
如 果 函 數(shù) os_wait 同 時 等 待 K_IVL 和 K_SIG 事 件 , 那 么 函 數(shù)
os_reset_interval 用來校正定時器的問題。在該條件下,如果一個信號
(K_SIG)事件讓函數(shù) os_wait 退出等待,而時間間隔沒有被調(diào)整的話,
那么接下來函數(shù) os_wait 等待一個時間間隔事件,可能就不能按要求準確
延時了。
函數(shù) os_reset_interval 允許你去復(fù)位計時器,以致接下來函數(shù) os_wait
的調(diào)用可以達到預(yù)期的目的。”
我在實際使用中看到的都是跟在os_wait2 (K_SIG | K_IVL, ticks)后邊,但看網(wǎng)上有的例子沒有對返回結(jié)果進行判斷就直接使用了os_reset_interval(ticks)校正定時器,這就有可能對以后的os_wait2(ticks)造成影響。
根據(jù)幾次實驗(Keil軟件debug和實際上機運行),我發(fā)現(xiàn)影響是這樣的:
1. 如果在os_wait2 (K_SIG | K_IVL, Xticks)函數(shù)執(zhí)行時已經(jīng)有了SIGNAL EVENT,也就是沒有觸發(fā)時間間隔,那么隨后的os_reset_interval(Xticks)需要使用,以后再執(zhí)行os_wait2(Yticks)才能實現(xiàn)其準確功能。
2. 如果在os_wait2 (K_SIG | K_IVL, Xticks)函數(shù)執(zhí)行時,觸發(fā)并完成整個時間間隔后仍然沒有收到SIGNAL EVENT信號,那么就不再需要執(zhí)行os_reset_interval(Xticks),如果運行了該函數(shù),那么隨后的os_wait2(Yticks)函數(shù)實際時間間隔不是標明的Yticks,而是 (Yticks-Xticks)。需要留意。
3. 如果前面沒有os_wait2 (K_SIG | K_IVL, Xticks), 而使用了os_reset_interval(Xticks), 隨后的os_wait2(Yticks)函數(shù)實際延時間隔同樣是(Yticks-Xticks)。 |