

簡單一句話說就是:不要太早下手寫。
1.畫圖紙
編程就像蓋房子,蓋房子第一步是設計,畫出藍圖。
對應到編程就是寫設計文檔,首先概要設計,畫清楚流程圖,程序分層架構圖,每一層包含的模塊。
模塊的劃分,每個模塊功能、對外接口,模塊內部子模塊的劃分,每個子模塊功能,以及接口,都要寫清楚。
最近從我司的某個模塊代碼學到了,復雜的業務涉及到流程,數據,事件很多。
此時一個子模塊處理事件,利用了自己實現的事件發布訂閱中心;
一個子模塊處理收到的數據;
一個子模塊實現發數據;
一個子模塊進行每個步驟超時處理,利用了自己實現的一個timer模塊。
一個中心模塊負責事件分發及整體流程啟動和停止。
簡直清晰得不得了,太贊了。
2.搭架子
有了概要設計差不多可以開始編碼了(其實還有詳細設計)。
編碼的第一步是搭架子,寫好主要的接口,定義好主要用到timer、任務、隊列等,將主流程串起來,切忌陷入細節。
以上面的例子來說。
事件處理模塊,先定義出整個業務流程需要處理的事件;定義出事件處理回調函數,回調函數先空在那里,不要急著去實現。
定義一個隊列,用來放所有收到的事件。
定義事件發布回調函數,用于當事件產生時事件中心調起該回調通知本模塊事件產生了;
定義初始化函數,初始化要做的是調用事件中心模塊接口去注冊事件,注冊事件發布回調函數,初始化函數可以先實現。
收數據模塊,向數據收發驅動層注冊收到數據的回調,回調先不去實現。
?發數據模塊,定義好發數據接口。
timer模塊,定義需要用到的timer,定義好timer超時回調函數,回調先不實現,然后在timer初始化函數中調用timer模塊添加timer。
在中心模塊定義一個啟動流程接口,去調用各個子模塊初始化函數,創建任務,任務里面輪詢事件模塊是否有新事件到,有的話調用事件分發接口進行事件分發(即從隊列中取出事件并調用事件處理的回調函數)。
就這樣整個架子搭起來了,我理解有點像蓋房子先搭好樓四個角那幾根承重的柱子以及每層的橫梁和樓板。
3.填空
然后再把剛剛空出來的那些回調以及接口都填上具體實現代碼。
然而寫的中間還是會發現有些地方沒想清楚,沒設計好,比如剛剛定義的事件少了,發現還需定一個事件,那就加上;又比如接口少了或是接口參數不合理。這種情況是不可避免的。
昨天領導和我說,好的設計是能夠讓人照著這個設計寫出代碼,如果看著文檔不知道該咋寫說明設計得還是不夠好。先記一下。
4.最后說一下
如果僅僅盯著代碼其實遠遠不夠,整個系統包含編譯部分、廠商SDK、OS適配層、SDK適配層、我司平臺層(包括各種公共模塊和組件)、應用層。
編譯部分,包含編譯工具GCC、編譯批處理工具make,編譯腳本makefile(現在又有了CMake,自動生成Makefile,貌似現在都用這個了)、代碼編譯框架。
代碼編譯框架根據用戶輸入的編譯指令選擇去找到配置文件,根據配置文件編譯應用層哪個產品應用代碼,編譯平臺層哪些公共模塊,驅動層去鏈接哪個廠商的SDK,以及哪個版本的SDK等等。
編譯前還會根據配置文件生成一些C頭文件,里面是一些配置信息,諸如產品型號、軟件版本等等,還有自動生成部分代碼、編譯后自動生成接口說明文檔等功能。
而代碼其實是表層的東西,如果不了解背后原理直接看代碼就會很痛苦,比如如果不了解MQTT的通信機制,直接去啃代碼, 看到寫著訂閱主題都不知道在干嘛。
編碼能力是一方面,另一方面是學習各種技術的原理,能夠用起來。
后續一 一拆解學習。
最后推薦一個挺好玩的網站:tree.fm,里面收集了世界各地森林里的聲音(一般是鳥叫蟲鳴,溪流等等的聲音),以及實拍的圖片,有時候工作時或者睡前打開聽聽這種白噪音感覺特別治愈。圖片還能保存,界面如下:

祝大家假期愉快!
1.SylixOS,這款嵌入式RTOS值得學習!
2.芯片短缺或將結束?數據來說話。。。
3.代碼調著調著就失聯了,你碰到過嗎?
4.圖文并茂詳解STM32時鐘配置
5.電力物聯網與嵌入式系統,關系幾何?
6.RT-Thread攜手北航出版社共辦人工智能師資培訓

免責聲明:本文系網絡轉載,版權歸原作者所有。如涉及作品版權問題,請與我們聯系,我們將根據您提供的版權證明材料確認版權并支付稿酬或者刪除內容。