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