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