其實聊這個話題多多少少還是有點心虛的,因為到現在我也只是摸索到了門口,但為啥還是想聊這個話題呢? 可能是因為熱愛。。。也可能是不甘心。。。所以一路從入門到入門到再入門。。。 擁有八年單片機軟件開發的經驗的我想到這個問題的時候,還是會心慌,說實話我不知道該怎么寫,我只會那個最簡單的套路。。。
裸奔時代:查過專業的資料以后,我知道了一個名詞叫前后臺程序,記不清到底誰算前臺誰算后臺 暫且理解為前臺有個中斷程序,后臺有個超級循環在不停工作:
后來覺得這樣搞不行,現在都開始流行RTOS了,你要不上個RTOS,面試你都不好意思和別人say hello ,于是,學習freeRTOS 跑了個例程放棄了 ,學習UCOS,因為不免費放棄了,學習RTthread,寫了個簡單的面板顯示的項目,放棄了。放棄不代表他們不夠優秀,而是我不夠優秀,寫著寫著又回到了我以前的老路,多多少少是有點 成長的,聊以自慰吧。 應用RTOS我大概是這樣寫的:
后來寫著寫著發現又回到了裸機的套路,藍瘦啊,但是還是學到了一點,就是程序其實是有控制權的,當你裸奔的時候,程序的控制權就在你的手里,因為這個時候整個程序就只有應用程序(你自己寫的部分) 真正移植RTOS以后,發現需要移植系統的很多代碼,這個時候,程序就分為應用部分和系統部分,而控制權是屬于系統所有的, 只是再運行過程中,需要某個應用程序運行的時候,系統把控制權下放給你,等你運行完了,再把控制權交給系統,這里交出是必須的 大概分為主動上交和被搶走,主動上交就是相當于執行系統提供的sleep,我完事了,要睡了,這個時候控制權回歸系統。 另一種情況,我就是不交,哪怕沒事兒我也要占著,這時候系統會根據計算你已經獲得控制權的時間,如果超過了我給你規定的時候,就強行 給你關燈蓋被子。
這是兩種不同的方式的本質區別,這里用方式而沒有用構架二字,是因為這并不是我想要獲得的知識。 我想要的知道這個單片機程序到底該怎么寫?你引入了系統他不會告訴你應該怎么寫。
傳統我們應用的構架我稱為是順序式程序構架,這個玩意兒基本不用教,看一遍大家都會了。 那么另一種更加優美的構架方式是什么呢?或許有人會講當然是面向對象了,但是面向對象只是一種思想,并不是一種程序構架,其實也是 說對了一半,我想要獲得的是那種基于面向對象的思想而實現程序構架。
假如你搞過 安卓 C# 等等一系列開發應用程序的軟件以后,你就知道了另一種構架其實是:事件驅動型構架。
目前我只知道這兩種了,你要知道第三種,請一定要告訴我,后面會邊學邊分享給大家這種東西到底怎么在單片機上玩。 當你掌握了這種構架的核心,變成你自己的東西,你就再也不想回到那個通篇if else的結構當中了。