單片機只有一個CPU,一次只能執(zhí)行一條指令,要處理多任務(wù),相當于多個任務(wù)同時執(zhí)行,只有靠分時。
如果沒有實時操作系統(tǒng),自己做多任務(wù)處理很難的。
如果是采集通信數(shù)據(jù)處理輸入輸出這樣的常規(guī)任務(wù),可以采用中斷方式,中斷服務(wù)程序處理實時任務(wù),分析計算等任務(wù)放入主程序中。
多任務(wù)協(xié)調(diào),可用狀態(tài)自動機模型處理。
普通單片機內(nèi)部只有一個核,只能順序執(zhí)行指令,同一時刻不能并行執(zhí)行多條指令。
所謂的多任務(wù),也是分時執(zhí)行實現(xiàn)的。只是任務(wù)切換的非???,人感覺不滿任務(wù)的切換,像同時執(zhí)行一樣。
單片機要執(zhí)行多任務(wù),可以使用中斷的方式,也可以使用操作系統(tǒng),目前有一些適用于單片機的小型操作系統(tǒng)。
單個核心不可能真正同時處理兩個任務(wù)。一般來說,單片機主要是處理外設(shè)中斷,產(chǎn)生中斷的時候,主循環(huán)是停止執(zhí)行的,實際上是分時處理。如果要處理多個任務(wù),最簡單的是用實時系統(tǒng)RTOS,創(chuàng)建多個任務(wù)即可,還可以定義優(yōu)先級。如果要做到真正意義上的同時處理,就要用多核芯片。裸機系統(tǒng)可用片內(nèi)定時器產(chǎn)生中斷來切換任務(wù)。
首先、單片機多任務(wù)處理方案有哪些?
1、采用實時操作系統(tǒng)rtos
也是我們所說的實時操作系統(tǒng),rtos本身已經(jīng)實現(xiàn)了多任務(wù)調(diào)度算法,我們不在關(guān)心如何調(diào)度的問題,我們只需要根據(jù)rtos的api來創(chuàng)建多任務(wù)即可。常見的rtos有freertos,uc/OS,華為liteOS,t-thread等等。
2、采用有限狀態(tài)機(State Machine)
也可通過一幅簡單的示意圖(也叫「狀態(tài)轉(zhuǎn)移圖」)表示出來:
在單片機程序設(shè)計中,如果一個系統(tǒng)需要處理一系列連續(xù)發(fā)生的任務(wù),或在不同的模式下對輸入進行不同的處理,常常使用有限狀態(tài)機實現(xiàn)。例如測量、監(jiān)測、控制等控制邏輯型應(yīng)用。
其次、如何選擇單片機多任務(wù)調(diào)度方案
和rtos相比,狀態(tài)機占用的系統(tǒng)資源少,省去了系統(tǒng)調(diào)度定時器,沒有rtos占用的內(nèi)存也少了,但是需要程序人員來完成多任務(wù)調(diào)度。
從上面可以看出,如果單片機資源很有限,多任務(wù)邏輯又比較簡單,建議選擇狀態(tài)機方法。如果多任務(wù)很復(fù)雜,功能比較多,單片機功能比較強,rtos占用的資源可以忽略不計,那就可以考慮采用rtos來完成。采用rtos可以比較容易的實現(xiàn)模塊化設(shè)計。但是rtos需要注意的是多任務(wù)間的優(yōu)先級和多任務(wù)間的通信問題。
最后、單片機多任務(wù)如何選擇?
對于大部分編程來說其實一般的狀態(tài)機就夠了,小編也曾經(jīng)十分推崇rtos,但是到后來發(fā)現(xiàn),其實越是邏輯簡單,程序越是容易編寫,出錯的概率越小。大道至簡,小編現(xiàn)在大部分程序都是裸奔了,當然小編自創(chuàng)的異步編程也是相當?shù)谋憷?/p>
-
單片機
+關(guān)注
關(guān)注
6067文章
44992瀏覽量
650611
發(fā)布評論請先 登錄
單片機系統(tǒng)中的多任務(wù)多線程機制的實現(xiàn)
51單片機多任務(wù)機制的實現(xiàn)策略研究

單片機系統(tǒng)多任務(wù)實現(xiàn)方法
MSP430單片機實時多任務(wù)操作系統(tǒng)c源代碼

基于單片機狀態(tài)的多任務(wù)系統(tǒng)
51單片機多任務(wù)操作系統(tǒng)的原理與實現(xiàn)
基于實時操作系統(tǒng)的單片機多任務(wù)應(yīng)用程序設(shè)計

如何使用51單片機進行多任務(wù)機制及應(yīng)用

如何使用51單片機實現(xiàn)多任務(wù)機制的策略詳細資料說明

使用單片機實現(xiàn)道路交通燈多任務(wù)控制系統(tǒng)的課件說明

評論