圖說(shuō)嵌入式系統(tǒng)兩大法門(mén):注冊(cè)機(jī)制與消息機(jī)制

時(shí)間:2014-05-29

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

導(dǎo)語(yǔ):相對(duì)注冊(cè)機(jī)制,消息機(jī)制是大家所熟悉的一種底層向上層傳遞的方式,msOS采用uC/OS-II,標(biāo)配為業(yè)務(wù)邏輯與菜單界面兩個(gè)任務(wù),業(yè)務(wù)邏輯為高優(yōu)先級(jí),支持消息隊(duì)列,設(shè)備發(fā)送的消息,都在業(yè)務(wù)邏輯中處理。

注冊(cè)機(jī)制在嵌入式系統(tǒng)編程中很少提到,但回調(diào)函數(shù)大家經(jīng)常接觸,以軟件定時(shí)器為例:

軟件定時(shí)器設(shè)備通過(guò)函數(shù)Start把FunctionCallback作為參數(shù)傳入定時(shí)器設(shè)備中保存,之后開(kāi)啟定時(shí)器,延時(shí)1000ms之后,定時(shí)器就會(huì)直接調(diào)用FunctionCallback,所以這個(gè)FunctionCallback就叫做回調(diào)函數(shù)。類(lèi)似處理器的中斷一樣。

注冊(cè)機(jī)制類(lèi)似回調(diào)函數(shù)性質(zhì),只是把概念擴(kuò)展到變量,上層應(yīng)用通過(guò)注冊(cè)函數(shù)地址或者變量地址到設(shè)備中保存,當(dāng)設(shè)備中這個(gè)地址對(duì)應(yīng)的函數(shù)被激活或者變量值有改變,就調(diào)用這個(gè)函數(shù)或者更改這個(gè)變量值,以此達(dá)到底層對(duì)上層的信息傳遞。

以ADC設(shè)備為例,我們看一下注冊(cè)機(jī)制的應(yīng)用。首先在ADC設(shè)備device_adc.c中定義一個(gè)用于注冊(cè)變量地址的指針數(shù)組RegisterPointerBlock,初始值必須要指向一個(gè)空變量,否則若指向了一些有用的地址而導(dǎo)致這個(gè)地址對(duì)應(yīng)的數(shù)據(jù)改變,會(huì)引起不可預(yù)測(cè)問(wèn)題。

在設(shè)備中引入注冊(cè)機(jī)制,應(yīng)用層只需要把變量的地址注冊(cè)到設(shè)備中,設(shè)備自己可以通過(guò)這個(gè)地址修改數(shù)據(jù),這樣解放了應(yīng)用層,讓?xiě)?yīng)用層不需要關(guān)心如何獲取數(shù)據(jù)。但是,注冊(cè)機(jī)制也存在一些缺陷,那就是操作的數(shù)據(jù),必須要原子操作,否則會(huì)導(dǎo)致兩個(gè)應(yīng)用層與設(shè)備同時(shí)修改一個(gè)數(shù)據(jù)的異常存在,出現(xiàn)數(shù)據(jù)錯(cuò)誤,這個(gè)是需要避免的。

相對(duì)注冊(cè)機(jī)制,消息機(jī)制是大家所熟悉的一種底層向上層傳遞的方式,msOS采用uC/OS-II,標(biāo)配為業(yè)務(wù)邏輯與菜單界面兩個(gè)任務(wù),業(yè)務(wù)邏輯為高優(yōu)先級(jí),支持消息隊(duì)列,設(shè)備發(fā)送的消息,都在業(yè)務(wù)邏輯中處理。

需要注意的是,msOS是采用的是uC/OS-II,它屬于RTOS,業(yè)務(wù)邏輯與菜單界面雖然是兩個(gè)獨(dú)立的任務(wù),但并不是同時(shí)運(yùn)行的,一個(gè)時(shí)刻只能運(yùn)行一個(gè)任務(wù),業(yè)務(wù)邏輯的任務(wù)優(yōu)先級(jí)高于菜單界面,所以在沒(méi)有消息的時(shí)候,業(yè)務(wù)邏輯任務(wù)(LogicTask)在PendMessageQueue函數(shù)中掛起等待消息到來(lái),這個(gè)時(shí)候退到菜單界面任務(wù)(MenuTask)執(zhí)行,一旦按鍵設(shè)備檢測(cè)到按鍵并通過(guò)PostMessageToLogicTask發(fā)送消息,就會(huì)激活業(yè)務(wù)邏輯任務(wù),讓業(yè)務(wù)邏輯任務(wù)搶占菜單界面任務(wù)運(yùn)行。按鍵設(shè)備的運(yùn)行是基于系統(tǒng)節(jié)拍的,它是在中斷中運(yùn)行,優(yōu)先級(jí)比任務(wù)高,不會(huì)被任務(wù)搶占。

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

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

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

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

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

關(guān)注直驅(qū)與傳動(dòng)公眾號(hào)獲取更多資訊

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

最新新聞
查看更多資訊

娓娓工業(yè)

廣州金升陽(yáng)科技有限公司

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