曾幾何時,我也認(rèn)為,傳統(tǒng)多任務(wù)系統(tǒng)一定要優(yōu)于裸奔(結(jié)構(gòu)化編程)的方式,那時候我是這樣想的,因為結(jié)構(gòu)化編程可以說毫無復(fù)雜度可言,更像是考驗一個人的邏輯分析能力,而引入了系統(tǒng)以后,一切變得就復(fù)雜化了,它帶來了很多新的挑戰(zhàn),那時候我沒有接觸到事件驅(qū)動型編程,雖然作者現(xiàn)在認(rèn)為,在現(xiàn)代嵌入式軟件領(lǐng)域,傳統(tǒng)的多任務(wù)還是顯得那樣的蒼白無力,但是也只是因為是在嵌入式軟件領(lǐng)域而已。當(dāng)課題域被放寬以后,它們都有自己的價值所在,即存在及合理。
————程序小白.2021.1.2
課題域不同,其合適的方案也不同。
例如理論上可以用匯編語言寫一個os操作系統(tǒng),但是真的有人會這么干嗎?就算是有人真的用匯編寫出了一個完整的os,那以后的系統(tǒng)升級也怕是千難萬難,但是換一個課題域,匯編也有它的價值所在,例如我們的MCU的啟動文件編寫。
課題域類型分解:三種類型。
類型一:簡單主線型(結(jié)構(gòu)化編程的主戰(zhàn)場)。
類型二:復(fù)雜主線型(事件驅(qū)動編程的主戰(zhàn)場)
類型三:多條主線型,主線之間可能存在弱耦合(傳統(tǒng)多任務(wù)編程主戰(zhàn)場)
結(jié)構(gòu)化程序設(shè)計(裸奔)的特點:
1.一個偏向于簡單型主線控制,例如控制一個開關(guān)
2.程序的控制權(quán)在應(yīng)用程序
3.有部分狀態(tài)機(jī)程序設(shè)計的理念在其內(nèi)部,所以有結(jié)構(gòu)化程序設(shè)計類型過度到事件驅(qū)動型并沒有那么難。
進(jìn)階課題:如何完成結(jié)構(gòu)化程序設(shè)計類型到事件驅(qū)動型編程類型的過度?
事件驅(qū)動型編程的特點:
1.模型一分為二:應(yīng)用狀態(tài)機(jī)模型層和控制與服務(wù)在QF框架層。
2.多狀態(tài)機(jī)之間的協(xié)作的實現(xiàn)由QF控制(合作式或搶占式)。
3.更專注與嵌入式復(fù)雜系統(tǒng)的控制(例如多組電機(jī)傳感器協(xié)調(diào)控制模擬仿真)。
傳統(tǒng)多任務(wù)模型的特點:
1.專注于多主線、弱耦合式應(yīng)用開發(fā)。
2.提供更加豐富的組件功能及服務(wù)。
作者強(qiáng)調(diào)了很多關(guān)于傳統(tǒng)多任務(wù)類型的缺點,其實都是基于現(xiàn)代嵌入式系統(tǒng)開發(fā)提出的觀點。我認(rèn)為二者往往不是對立而是相互補(bǔ)充。如何將事件驅(qū)動型編程模型作為組件與傳統(tǒng)多任務(wù)模型共同使用是解決特殊課題的關(guān)鍵。
所有這一切的努力都是為了實現(xiàn)大型系統(tǒng)的小型化,小型系統(tǒng)的模塊化,將問題逐步分解劃歸為特定的范圍來解決復(fù)雜度的問題。