<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 裸奔的雙任務(wù)系統-嵌入式微系統連載之十一

裸奔的雙任務(wù)系統-嵌入式微系統連載之十一

作者: 時(shí)間:2014-10-01 來(lái)源:網(wǎng)絡(luò ) 收藏

  2014年春節里的一天上午,msOS QQ群里面討論的很激烈,“傳說(shuō)中的火槍手”認為msOS-Mcu51已經(jīng)很好了,對于msOS-Stm32引入uC/OS-II意見(jiàn)比較大。雖然他也用過(guò)uC/OS-II,但并不喜歡,有一種不確定感,所以很喜歡裸奔。但他的觀(guān)點(diǎn)受到群內不少用戶(hù)網(wǎng)友的反駁,以“獨釣千古愁”為代表,持續了將近半個(gè)多小時(shí),我一直在旁圍觀(guān)。

本文引用地址:http://dyxdggzs.com/article/263541.htm

  通過(guò)這次辯論,雙方都把各自的觀(guān)點(diǎn)表達的非常清晰、明了。有它的優(yōu)點(diǎn),但確實(shí)存在很明顯的缺點(diǎn),這個(gè)無(wú)可爭議,尤其是大家提出的幾個(gè)問(wèn)題:

  1、 帶RTOS系統,不便于移植,這個(gè)對msOS的跨硬件平臺推廣是很不利的。

  2、 嵌入式工程師,往往有強烈的掌控欲,而理解透徹RTOS有一定的難度,有一種把握不住的感覺(jué)而拒絕RTOS。

  3、 現實(shí)中絕大多數嵌入式項目,只要通過(guò)合理的設計,不需要RTOS。

  4、 帶RTOS的系統,在任務(wù)調度時(shí)進(jìn)入臨界態(tài),這個(gè)時(shí)候無(wú)法響應中斷,不適合應用于實(shí)時(shí)性要求高的地方。

  以上四個(gè)原因,讓我認識到需要推出一個(gè)msOS的無(wú)RTOS版本,但還要實(shí)現類(lèi)似RTOS的功能,把業(yè)務(wù)邏輯與菜單界面分離。在討論中,“傳說(shuō)中的火槍手”有一句話(huà)提醒了我,他提到他自己有一套類(lèi)似MS3(msOS的前身)的架構,他用了一個(gè)中斷處理各種消息,而這個(gè)時(shí)候,我也在想著(zhù)如何改造uC/OS-II的任務(wù)切換軟中斷,實(shí)現,思路完全一致,他的話(huà)說(shuō)明了這個(gè)方案是可行的。

  后來(lái)的一段時(shí)間,忙著(zhù)msOS文檔,進(jìn)一步完善msOS代碼,一直沒(méi)有著(zhù)手寫(xiě)。直到三月份才開(kāi)始按照軟中斷方式,粗粗的寫(xiě)了一個(gè)無(wú)OS的版本msOS,實(shí)現了這個(gè)功能,但因為當時(shí)對Stm32的中斷系統理解不深,所以放到群內讓大家一起分析,尋找bug,這個(gè)時(shí)候,“獨釣千古愁”對無(wú)OS版本msOS提出了很多建議,并且直接在這個(gè)版本基礎上修改,完全的丟棄了匯編代碼,移植非常容易,其中部分處理方式引用了他跟“傳說(shuō)中的火槍手”交流時(shí)提供的代碼。我再在“獨釣千古愁”提供的版本基礎上進(jìn)一步優(yōu)化,統一風(fēng)格,定型后在群內發(fā)布,當“傳說(shuō)中的火槍手”看到最終版本,就覺(jué)得有他的影子存在。

  這個(gè)無(wú)OS版本的msOS,最終的命名是“Tomsu”起的,他參考軟件的命名習慣,因為這是一個(gè)無(wú)OS簡(jiǎn)化版本,所以推薦為msOS-Lite版本,Lite的意思是“精簡(jiǎn)”??梢哉f(shuō),msOS-Lite版本,是整個(gè)msOS群大家參與討論出來(lái)的,雖然有幾個(gè)相對重要的網(wǎng)友積極推動(dòng),但其它網(wǎng)友的貢獻是不能抹殺的,集體的力量是強大的。我對這個(gè)版本非常滿(mǎn)意,因為它準確的反應了msOS理念:簡(jiǎn)單、易用。

  無(wú)RTOS實(shí)現雙任務(wù),甚至多任務(wù),本質(zhì)上講跟RTOS方法類(lèi)似的,只是RTOS是把一個(gè)main大循環(huán)斬成多個(gè)具有優(yōu)先級的小循環(huán),消息觸發(fā)決定在最高優(yōu)先級的小循環(huán)中執行。因為是小循環(huán),死循環(huán),一直循環(huán)下去,所以必須要有觸發(fā)進(jìn)入條件和等待資源掛起條件,否則這個(gè)小循環(huán)一直執行下去,別的小循環(huán)就執行不了了。

  無(wú)RTOS版本多任務(wù),把中斷看作是任務(wù),因為中斷優(yōu)先級高于main大循環(huán),建立一個(gè)最低優(yōu)先級的,可以被消息觸發(fā)的軟中斷來(lái)實(shí)現任務(wù),但因為在中斷中,所以建立的這個(gè)任務(wù)不是一個(gè)死循環(huán),而是執行完畢就跳出的。而這一點(diǎn)恰好符合msOS的業(yè)務(wù)邏輯中的消息機制,執行完消息就退出的特點(diǎn),不需要死循環(huán)等待在哪兒。

  多個(gè)中斷,就實(shí)現多個(gè)任務(wù),尤其是systick系統節拍中斷,有很多事務(wù)在系統節拍中例行處理,類(lèi)似任務(wù),雖然這個(gè)任務(wù)不是嚴格意義上的,功能不強大,但夠我們用了,尤其是對msOS來(lái)說(shuō),只需要兩個(gè)任務(wù),恰好合適。

  為了跟uC/OS-II兼容,選擇了軟中斷PendSV,把優(yōu)先級設置為最低。

  

 

  其次,宏定義形式定義軟中斷PendSV的觸發(fā)指令,只要EnterInterrupt這個(gè)宏指令被調用,就激活PendSV中斷。這部分代碼“獨釣千古愁”和“傳說(shuō)中的火槍手”提供的,寫(xiě)的非常好,原來(lái)這部分在匯編中的,移到了C語(yǔ)言中,這樣子msOS-Lite就沒(méi)有了匯編代碼。

  

 

  再次,編寫(xiě)PendSV的中斷響應代碼,考慮到有多個(gè)消息源同時(shí)拋出消息,但響應中斷只有一次,所以在中斷響應中必須要把消息隊列中的消息處理完,否則會(huì )導致后續的消息因為中斷此前被占用而不會(huì )再次產(chǎn)生中斷標記而無(wú)法重入的問(wèn)題。這兒增加了CheckMessage函數來(lái)實(shí)現。

  

 

  最后,改寫(xiě)拋出消息入隊列函數,調用EnterInterrupt觸發(fā)PendSV中斷。

  

 

  至此,無(wú)RTOS的msOS-Lite版本完成,非常感謝msOS QQ群的所有網(wǎng)友的支持與合作



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>