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