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