溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

VxWorks中多任務(wù)通信的示例分析

發(fā)布時間:2021-12-22 10:40:36 來源:億速云 閱讀:184 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下VxWorks中多任務(wù)通信的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

VxWorks是一個典型的多任務(wù)操作系統(tǒng)。這多個任務(wù)之間不可能完全的彼此獨(dú)立,它們需要一些系統(tǒng)機(jī)制來協(xié)調(diào)彼此的動作。這些機(jī)制就屬于多任務(wù)通信,主要可以分為兩類:事件通知、數(shù)據(jù)傳遞。

VxWorks系統(tǒng)提供了多種任務(wù)間通信機(jī)制:中斷鎖、任務(wù)鎖、多種信號量、消息隊(duì)列、管道、VxWorks事件(VxWorks Event)、消息通道。另外,同一內(nèi)存空間里的任務(wù)(都在內(nèi)核,或在同一RTP里)可以通過訪問共享的數(shù)據(jù)結(jié)構(gòu),直接進(jìn)行數(shù)據(jù)交換。不過,這些共享資源最好由互斥機(jī)制進(jìn)行保護(hù)

  • 中斷鎖 - 可以關(guān)閉中斷,阻止ISR搶占。這可不是通用機(jī)制,一定要謹(jǐn)慎使用

  • 任務(wù)鎖 - 可以關(guān)閉其它任務(wù)的搶占。同樣也不是通用機(jī)制,要謹(jǐn)慎使用

  • 信號量 - 任務(wù)同步與互斥的基本方法。VxWorks提供四種信號量,以及POSIX信號量。還可以將信號量創(chuàng)建為公共對象,用于進(jìn)程間通信

  • 消息隊(duì)列 - 直接在任務(wù)間傳遞消息(數(shù)據(jù))的高級機(jī)制。也可以創(chuàng)建為公共對象,用于進(jìn)程間通信

  • 管道 - 在消息隊(duì)列上封裝的另一種消息機(jī)制。通過標(biāo)準(zhǔn)I/O函數(shù)和select()來操作

  • VxWorks事件 - 可用于任務(wù)-任務(wù)、ISR-任務(wù)、信號量-任務(wù)、消息隊(duì)列-任務(wù)之間的同步與通信

  • 消息通道 - 基于socket的通信機(jī)制,可用于任務(wù)間、進(jìn)程間、處理器間通信


另外還有信號(Signal)可以在任務(wù)和進(jìn)程間傳遞事件,不過一般不把它當(dāng)作通信機(jī)制

共享數(shù)據(jù)結(jié)構(gòu)

同一內(nèi)存空間里(都在內(nèi)核,或在同一RTP里)的任務(wù)之間,最顯而易見的的通信方式就是訪問共享的數(shù)據(jù)結(jié)構(gòu),因?yàn)樗鼈兪褂脝我痪€性地址空間

不同的任務(wù)可以直接訪問全局變量、線性緩沖區(qū)、環(huán)形緩沖區(qū)、鏈表,以及指針。不過這些共享的數(shù)據(jù)結(jié)構(gòu),需要使用互斥機(jī)制(例如互斥信號量)來保護(hù)

 

中斷鎖

函數(shù)intLock()關(guān)閉中斷,阻止ISR的搶占。在任務(wù)或ISR里都可以調(diào)用它。函數(shù)intUnLock()重新使能中斷。這一對兒函數(shù)通常用于保護(hù)臨界區(qū)域

VxWorks中多任務(wù)通信的示例分析

當(dāng)任務(wù)去訪問ISR也會訪問的數(shù)據(jù)結(jié)構(gòu)時,就使用intLock()來阻止ISR的搶占。很顯然,這種操作應(yīng)該盡可能的簡短,甚至不要調(diào)用任何函數(shù)。否則它直接影響到中斷延時,導(dǎo)致系統(tǒng)的不確定性。如果還要阻止任務(wù)的搶占,那么同時要使用taskLock()

警告:使用中斷鎖時,再調(diào)用系統(tǒng)函數(shù)的話,可以導(dǎo)致中斷不定期的重新使能,例如調(diào)用的函數(shù)發(fā)生阻塞,或者激活高優(yōu)先級任務(wù)

任務(wù)鎖

函數(shù)taskLock()關(guān)閉任務(wù)搶占,僅讓當(dāng)前任務(wù)執(zhí)行,除非當(dāng)前任務(wù)阻塞或掛起。當(dāng)這個任務(wù)解除阻塞、恢復(fù)執(zhí)行后,它會再次禁止任務(wù)搶占。函數(shù)taskUnlock()恢復(fù)其它任務(wù)的搶占。這一對兒函數(shù)也用于保護(hù)臨界區(qū)域,不過不能在ISR中使用

VxWorks中多任務(wù)通信的示例分析

任務(wù)鎖可以嵌套使用,其內(nèi)部有計數(shù)器,因此同等數(shù)量的taskUnlock()被調(diào)用后,才能真正的重新使能任務(wù)搶占

注意: 任務(wù)鎖可能影響系統(tǒng)的實(shí)時響應(yīng)時間,因?yàn)樗柚沽烁邇?yōu)先級任務(wù)的執(zhí)行,通常互斥信號量是個更好的選擇。另外,任務(wù)鎖不會阻止中斷。想要同時阻止中斷搶占的話,就同時使用intLock()

看完了這篇文章,相信你對“VxWorks中多任務(wù)通信的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI