亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: uC/OS-II任務(wù)間的同步通信 [打印本頁]

作者: wangyin    時間: 2014-8-10 12:15
標題: uC/OS-II任務(wù)間的同步通信
    當你開始去學(xué)習(xí)uC/OS-ii的時候,心里面肯定有底,覺得自己的單片機或者某些語言學(xué)的還算是可以,然后當接到復(fù)雜的系統(tǒng),或者在某些邏輯方面難以用簡單的過程控制去實現(xiàn)的時候,很多時候心里面總有一個想法,如果有某樣一種方法能夠使我很容易的搞定那該多好啊!在很大程度上操作系統(tǒng)不是說你想讓自己的項目中添加就一定可以添加的(拿uC/OS-ii為例),因為在使用OS的時候,工程師們往往會面臨很多的問題,是否會?是否熟悉?這個項目是否一定得去使用,有時候我自己都被這個問題所困擾,因為我也是剛剛開始接觸uC/OS-ii,其實我們并不用時刻去考慮這個問題,還是得把重心放在學(xué)習(xí)這個系統(tǒng)上面,當自己確實對其可以駕馭的時候,同時某個項目搞不定了,那么你一定會想到應(yīng)該使用OS了,那么就很順其自然的運用到了,用的好或者差就是自己所掌握的情況了。上面是我自己學(xué)習(xí)uC/OS-ii以來一直難以想通的地方,在學(xué)習(xí)的過程中時刻想著在自己以前做過的項目里面加入uC/OS-ii,也許這樣就感覺十分的“高大上”了,其實不然,用的好確實厲害,如果生搬硬套可能會導(dǎo)致系統(tǒng)都沒法工作,而且不知道自己究竟想干嘛……
    由于平時也很忙,所以沒有太多的時間去寫一些東西,只能利用周末了,這次的主題是“通信”和“同步”,對于這兩個詞我們并不陌生,通信嘛……不就是相互交換東西,你的給我,我的給你,同步---說白了就是相對靜止,共同進步的意思,在uC/OS-ii中的通信和同步是相對任務(wù)而言的,需要記住的地方是在OS中,所有的對象都是任務(wù),一切的工作都是圍繞任務(wù)在轉(zhuǎn)動,對于task而言,我們所想到的是OSTCB(任務(wù)控制塊),后面會具體講到這個的作用,對于通信而言,需要靠事件(EVENT)來完成,那么就有了一個新的名詞(OSECB),在uC/OS-ii中事件包括:信號量(semaphore其中互斥信號量留在后面進行說明)、消息郵箱(mail-box)、消息隊列(query)。
    信號量(Sem):通過字面意思可以了解到是信號(flag),作為標志使用,主要做判斷,就好比是只能有了鑰匙才可以開門這樣子,所以sem就如同這個鑰匙,任務(wù)只有得到了sem才可以運行,換句話說就處在了Running狀態(tài),沒有得到sem的任務(wù)處于waiting或者pending狀態(tài)。
    消息郵箱(M-box):郵箱就是傳消息的,任務(wù)與任務(wù)之間可以通過郵箱來交換信息,其實這個時間和sem也挺像的,只有獲得了消息才可以使任務(wù)處于Running狀態(tài),只不過相比sem而言可能會高端一點點,功能多了一些----可以傳值了,因為畢竟是郵箱嘛,可以裝東西。
    消息隊列(Query):消息隊列,一聽就是一整個隊列,很多很多的意思,其實它的功能和m-box的功能差不多,只不過是m-box的升級版,傳遞的值變得很多了,畢竟是隊列嘛……m-box有的功能,query都存在!這就是它的優(yōu)勢,可以傳遞很多的值。
    對于初學(xué)者來說關(guān)于事件處理的函數(shù)有很多,一下在都不知道從何下手去看和實驗,這里介紹在uC/OS-ii任務(wù)間通信最為關(guān)鍵的兩個函數(shù):OS***Pend()和OS***Post(),其中的***表示具體事件。對于他們的執(zhí)行過程我們可以通過Debug來理清楚,具體如下:當事件控制塊(OSECB)中的相關(guān)量為空,例如sem中的cnt為0或者m-box為null的時候,只要有任務(wù)調(diào)用OS***Pend()的時候會引發(fā)任務(wù)切換(不是處在中斷中),當前任務(wù)被掛起,如果事件控制塊中的相關(guān)量不為空則任務(wù)正常運行,當任務(wù)中調(diào)用了OSTimeDly()函數(shù)(前面講過其作用),則會進行一次任務(wù)調(diào)度。如果ECB中的相關(guān)量為空,任務(wù)調(diào)用OS***Pend()的時候會產(chǎn)生任務(wù)切換,當前任務(wù)執(zhí)行被斷開了,假設(shè)斷開點為A,并將當前任務(wù)掛起,如果在另一個任務(wù)中調(diào)用OS***Post()時,會對事件的相關(guān)量進行改變,例如sem中的cnt加1或者m-box不在為空,則同時會切換到waiting狀態(tài)下等待這些信號的最高優(yōu)先級任務(wù)中,并且在斷開點處繼續(xù)運行該任務(wù),如果說沒有任務(wù)處于waiting狀態(tài),則任務(wù)會正常運行。事件操作的基本流程如上所述。有一點需要注意,出了空閑任務(wù)之外的所有任務(wù)必須在任務(wù)中合適的位置調(diào)用系統(tǒng)提供的函數(shù)OSTimeDly(),使當前任務(wù)的運行延時一段時間并進行一次任務(wù)調(diào)度,以讓出CPU的使用權(quán),使低優(yōu)先級的任務(wù)得以運行。







歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1