VxWorks下的多重定時(shí)器設(shè)計(jì)
3.2 主要實(shí)現(xiàn)代碼
一個(gè)三重定時(shí)器的主要實(shí)現(xiàn)代碼如下:
以上程序中通過sysClkRateSet(100)將最小延時(shí)單位tick修改成10 ms,它是幾個(gè)定時(shí)時(shí)間(30 ms、40 ms、60ms)的最大公約數(shù)。通過抓包軟件Ethereal抓包,查看發(fā)送時(shí)間。以30 ms為例,抓包100次的平均定時(shí)時(shí)間在25 ms左右。出現(xiàn)這種情況的原因是,延時(shí)N個(gè)tick實(shí)際是延時(shí)(N-1)tick~N?tick。由于是等可能概率,則它的數(shù)學(xué)期望是(N+1/2)。對(duì)于tick為10 ms,30 ms即N=3,數(shù)學(xué)期望為25 ms。示意圖如圖4所示。
延時(shí)精度為1/N秒,N越大越精確。于是調(diào)用函數(shù)synClkRateSet(500),可以使定時(shí)的最大誤差不超過2 ms。但是如果時(shí)鐘頻率太高,會(huì)造成系統(tǒng)在時(shí)鐘中斷處理方面開銷太大,影響系統(tǒng)的任務(wù)調(diào)度,最好通過實(shí)驗(yàn)選用較為合適的時(shí)鐘頻率。這里選用sysClkRate-Set(200)。
結(jié) 語(yǔ)
本文針對(duì)VxWorks下UDP網(wǎng)絡(luò)通信中的可靠傳輸問題,提出了一個(gè)支持重傳和定時(shí)等待確認(rèn)的協(xié)議,并利用VxWorks系統(tǒng)提供的信號(hào)量同步、消息隊(duì)列和看門狗定時(shí)器等多種機(jī)制,綜合設(shè)計(jì)了一種可擴(kuò)展的三重定時(shí)器。針對(duì)遇到的具體問題,筆者還進(jìn)行了一定的優(yōu)化處理。這種多重定時(shí)器模型已在筆者所研究的項(xiàng)目中得到利用,驗(yàn)證了其可行性和相對(duì)穩(wěn)定性。這種多重定時(shí)器模型并不完全適合所有環(huán)境,需要根據(jù)具體情況改進(jìn)和優(yōu)化。
評(píng)論