從一本中文手冊上看到對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)。 |