在5.5版本之前,VxWorks并沒有事件這一通信機(jī)制。事件(event) 出現(xiàn)在pSOS實(shí)時(shí)操作系統(tǒng)中,在風(fēng)河公司收購了pSOS之后,從VxWorks 5.5之后,加入了事件機(jī)制,并在pSOS事件的基礎(chǔ)上做了增強(qiáng)和改進(jìn)。事件可用于任務(wù)和中斷服務(wù)程序ISR之間、任務(wù)和任務(wù)之間、任務(wù)和VxWorks資源之間進(jìn)行通信。任務(wù)用函數(shù)eventReceive()來接收它關(guān)心的事件,用eventSend()來向另一個(gè)任務(wù)發(fā)送事件。VxWorks資源主要是指信號(hào)量和消息隊(duì)列,一個(gè)任務(wù)要想從VxWorks資源接收到事件,必須*行注冊(register),那么當(dāng)資源處于FREE狀態(tài)時(shí),會(huì)向注冊過的任務(wù)發(fā)送一個(gè)事件。對于每一個(gè)VxWorks資源,最多只允許有一個(gè)任務(wù)注冊。如對于消息隊(duì)列,任務(wù)可以使用函數(shù)msgQEvStart()來進(jìn)行注冊,那么當(dāng)有消息到達(dá)這個(gè)消息隊(duì)列而又沒有任務(wù)等待這個(gè)消息隊(duì)列時(shí),會(huì)向這個(gè)任務(wù)發(fā)送一個(gè)事件,表明消息隊(duì)列可用。而對于信號(hào)量,可以用函數(shù)semEvStart()來進(jìn)行注冊。但必須注意的是,一個(gè)任務(wù)接收到資源發(fā)送的事件后,并不能保證這個(gè)任務(wù)能獲取該資源,如獲取信號(hào)量、從消息隊(duì)列接收到消息。在VxWorks中,每一個(gè)任務(wù)都有一個(gè)32位事件寄存器,其中高8位由VxWorks系統(tǒng)保留,可以使用低24位,其每一位表示一種事件,而事件的意義則有任務(wù)來定義,因此對于不同的任務(wù),相同的位可能有不同的意義。而VxWorks并不對事件進(jìn)行計(jì)數(shù),而只表示該事件發(fā)生過,這與消息隊(duì)列不同,因此接收事件的任務(wù)并不能知道接受到的事件發(fā)生的次數(shù)。事件非常適合于一個(gè)任務(wù)必須與多個(gè)任務(wù)進(jìn)行通信的場合,如任務(wù)A必須同時(shí)與任務(wù)B、任務(wù)C、任務(wù)D進(jìn)行通信,其中任務(wù)B通過消息隊(duì)列向任務(wù)A發(fā)送數(shù)據(jù),其發(fā)送頻率較低,它要求任務(wù)A必須及時(shí)進(jìn)行處理;而任務(wù)C則只是向任務(wù)A指示一種狀態(tài),但頻率很高;而任務(wù)D用來通知任務(wù)A釋放動(dòng)態(tài)申請的資源,并停止運(yùn)行。在這種場合,事件機(jī)制能很好地解決問題。
版權(quán)與免責(zé)聲明:
1.凡本網(wǎng)注明"來源:全球制造網(wǎng)"的所有作品,版權(quán)均屬于全球制造網(wǎng),轉(zhuǎn)載請必須注明全球制造網(wǎng)。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
2.企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
3.本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來源,并自負(fù)版權(quán)等法律責(zé)任。
4.如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系。