嵌入式微系統(tǒng)的發(fā)令槍:系統(tǒng)節(jié)拍與軟件定時(shí)器

時(shí)間:2014-06-03

來源:網(wǎng)絡(luò)轉(zhuǎn)載

導(dǎo)語:定時(shí)器是一個(gè)項(xiàng)目中經(jīng)常用到的設(shè)備,比如動畫設(shè)計(jì)、鬧鐘、定時(shí)工作、超時(shí)處理等。然而一個(gè)處理器往往自帶的硬件定時(shí)器是非常有限的,并且功能也比較有限,不能靈活應(yīng)用,所以需要通過系統(tǒng)節(jié)拍虛擬出多路軟件定時(shí)器。

系統(tǒng)節(jié)拍是非常重要的一個(gè)設(shè)備,在早期的MCU51和ARM7芯片中,沒有專門的系統(tǒng)節(jié)拍,往往由一路硬件定時(shí)器來實(shí)現(xiàn)其功能,到了Cortex系列,ARM提供了Systick硬件定時(shí)器專門用于系統(tǒng)節(jié)拍,可見現(xiàn)在的編程對系統(tǒng)節(jié)拍的依賴性。

系統(tǒng)節(jié)拍的概念比較早的出現(xiàn)在OS中,產(chǎn)生固定間隔的重復(fù)中斷,用于任務(wù)的超時(shí)等待或者任務(wù)延時(shí)多少個(gè)節(jié)拍周期用。在前后臺系統(tǒng)中,也引入了系統(tǒng)節(jié)拍,比如msOS-Mcu51版本很早就引入了系統(tǒng)節(jié)拍,實(shí)現(xiàn)按鍵掃描、虛擬定時(shí)器等功能。此外還有一種基于時(shí)間片編程的架構(gòu),直接采用系統(tǒng)節(jié)拍來處理一些對時(shí)間精度要求比較高的需求。常用時(shí)間間隔是5mS或者10mS,也就是說每秒鐘200次或者100次節(jié)拍。隨著處理器速度的提高,尤其是在一些控制要求高的地方,可以采用1mS,msOS甚至采用了0.1mS的高頻率系統(tǒng)節(jié)拍。這個(gè)具體的時(shí)間間隔跟項(xiàng)目需求有關(guān),可以根據(jù)自己的項(xiàng)目靈活配置,但在滿足需求的情況下,不建議設(shè)置的太高,否則影響處理器效率。

msOS中的很多設(shè)備,都需要基于系統(tǒng)節(jié)拍來運(yùn)行,比如按鍵、軟件定時(shí)器。這些設(shè)備不需要太高的系統(tǒng)時(shí)鐘,按鍵只需要每秒鐘100次,軟件定時(shí)器需要每秒鐘1000次節(jié)拍,但msOS因?yàn)槊嫦驎r(shí)間精度要求比較高的行業(yè),所以默認(rèn)的系統(tǒng)節(jié)拍時(shí)間間隔設(shè)置的很短,達(dá)到0.1ms,也就是說一秒鐘一萬次節(jié)拍。所以需要對系統(tǒng)節(jié)拍進(jìn)行分頻處理,但因?yàn)橄到y(tǒng)節(jié)拍真實(shí)的間隔是0.1ms,以STM32工作在72MHz為例,這么短的時(shí)間最多只能執(zhí)行7200個(gè)CPU指令,為了防止各個(gè)低速設(shè)備都擠在同一個(gè)系統(tǒng)節(jié)拍內(nèi)運(yùn)行,超過7200個(gè)指令,所以在分頻的時(shí)候,不要把所有的設(shè)備都放在同一個(gè)節(jié)拍里面,需要把各個(gè)設(shè)備分散到各個(gè)節(jié)拍中運(yùn)行。

Device_systick.c是系統(tǒng)節(jié)拍設(shè)備,它除了分散節(jié)拍直接調(diào)用固定的運(yùn)行在其上的設(shè)備外,還提供了注冊機(jī)制給上層應(yīng)用程序提供系統(tǒng)節(jié)拍,具體如下:

定時(shí)器是一個(gè)項(xiàng)目中經(jīng)常用到的設(shè)備,比如動畫設(shè)計(jì)、鬧鐘、定時(shí)工作、超時(shí)處理等。然而一個(gè)處理器往往自帶的硬件定時(shí)器是非常有限的,并且功能也比較有限,不能靈活應(yīng)用,所以需要通過系統(tǒng)節(jié)拍虛擬出多路軟件定時(shí)器。

軟件定時(shí)器主要定時(shí)器服務(wù)、啟動、停止三個(gè)函數(shù)組成,默認(rèn)支持8個(gè)軟件定時(shí)器,以下面代碼為例加以說明。

FunctionCallback為定時(shí)器超時(shí)后的回調(diào)執(zhí)行函數(shù),是軟件定時(shí)器初始化的第三個(gè)參數(shù),超時(shí)時(shí)間到就執(zhí)行這個(gè)函數(shù),第二個(gè)參數(shù)1000為超時(shí)的時(shí)間,單位是軟件定時(shí)器的系統(tǒng)時(shí)鐘,msOS采用的是1mS,1000也就是一秒鐘。第一個(gè)參數(shù)為回調(diào)函數(shù)執(zhí)行的位置,TimerMessageHandle表示在業(yè)務(wù)邏輯中執(zhí)行,適合處理代碼量大的,處理時(shí)間長的函數(shù)。TimerSystickHandle表示在系統(tǒng)節(jié)拍中直接處理,系統(tǒng)節(jié)拍內(nèi)一般適合代碼量少的,處理時(shí)間短的函數(shù)。軟件定時(shí)器功能非常有用,它的結(jié)構(gòu)也非常簡單,用戶看懂之后可以任意擴(kuò)展其功能完成自己特殊的用途。

更多資訊請關(guān)注嵌入式系統(tǒng)頻道。

中傳動網(wǎng)版權(quán)與免責(zé)聲明:

凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

關(guān)注伺服與運(yùn)動控制公眾號獲取更多資訊

關(guān)注直驅(qū)與傳動公眾號獲取更多資訊

關(guān)注中國傳動網(wǎng)公眾號獲取更多資訊

最新新聞
查看更多資訊

娓娓工業(yè)

廣州金升陽科技有限公司

熱搜詞
  • 運(yùn)動控制
  • 伺服系統(tǒng)
  • 機(jī)器視覺
  • 機(jī)械傳動
  • 編碼器
  • 直驅(qū)系統(tǒng)
  • 工業(yè)電源
  • 電力電子
  • 工業(yè)互聯(lián)
  • 高壓變頻器
  • 中低壓變頻器
  • 傳感器
  • 人機(jī)界面
  • PLC
  • 電氣聯(lián)接
  • 工業(yè)機(jī)器人
  • 低壓電器
  • 機(jī)柜
回頂部
點(diǎn)贊 0
取消 0