有網(wǎng)友問:單片機(jī)小項(xiàng)目,有必要做分層設(shè)計(jì)嗎?
這個(gè)問題,主要看項(xiàng)目本身,以及公司管理。小項(xiàng)目,是有多小?公司對(duì)項(xiàng)目的管理是否看重?
正規(guī)一點(diǎn)的公司,從長遠(yuǎn)的角度來說,很有必要做好軟件分層設(shè)計(jì)。下面就簡(jiǎn)單說兩點(diǎn)編程分層的思想。
分層思想
嵌入式分層思想,可能初學(xué)者不太懂,但你肯定見到過很多類似下面這樣的軟件結(jié)構(gòu)圖。
比如,RT-Thread Nano內(nèi)核結(jié)構(gòu):
STM32Cube軟件結(jié)構(gòu):
這種軟件結(jié)構(gòu)圖,里面的東西可能有點(diǎn)多,可能你也看不懂。 但是,只要你仔細(xì)一看每個(gè)區(qū)域的劃分,你就會(huì)發(fā)現(xiàn),它們是把軟件劃分了多個(gè)區(qū)域,這里其實(shí)就是一種分層的思想。
舉一個(gè)例子:一個(gè)遙控器控制一個(gè)小車運(yùn)動(dòng),包含遙控器的按鍵(比如:前后左右),無線通信(比如:433),小車無線接收,電機(jī)驅(qū)動(dòng)、電機(jī)控制算法等。
遇到這種嵌入式軟件開發(fā),你會(huì)怎么編程?
1.底層驅(qū)動(dòng)層小車部分:電機(jī)驅(qū)動(dòng)(比如IO時(shí)鐘、PWM配置)封裝成一個(gè)函數(shù)、433驅(qū)動(dòng)封裝成一個(gè)函數(shù)。然后把這兩個(gè)函數(shù)整理在一個(gè)Driver(驅(qū)動(dòng))函數(shù)。
遙控部分同理:按鍵驅(qū)動(dòng)(比如IO時(shí)鐘、配置)封裝成一個(gè)函數(shù)、433驅(qū)動(dòng)封裝成一個(gè)函數(shù)。
2.中間層這里比如你電機(jī)用到了加減速、左右轉(zhuǎn)向的一些算法,封裝成對(duì)應(yīng)Middleware中間層模塊函數(shù)(待應(yīng)用層調(diào)用)。
3.應(yīng)用層應(yīng)用層就考驗(yàn)?zāi)銟I(yè)務(wù)邏輯的一層,也是整合軟件資源的一層。如果你代碼層次畫分的話,業(yè)務(wù)邏輯代碼就很容易。
反之,你代碼很亂,要實(shí)現(xiàn)一個(gè)業(yè)務(wù)邏輯,可能連續(xù)加班多天,最后寫出來的代碼也是bug無數(shù)。
模塊化
嵌入式編程,模塊化相當(dāng)重要,可以說,它會(huì)影響你代碼質(zhì)量、加班多少、甚至升職加薪。
還是上面那個(gè)例子:一個(gè)遙控器控制一個(gè)小車運(yùn)動(dòng),包含遙控器的按鍵(比如:前后左右),無線通信(比如:433),小車無線接收,電機(jī)驅(qū)動(dòng)、電機(jī)控制算法等。
如果你把所有代碼都寫在main函數(shù),你說能實(shí)現(xiàn)嗎?當(dāng)然,肯定也能實(shí)現(xiàn)。 但是,你這樣寫,你的業(yè)務(wù)邏輯代碼是不是很廢腦、很費(fèi)時(shí)間? 還有,你后續(xù)加修改按鍵方式、添加功能,你該怎么辦?
所以,你需要模塊化編程,把一些小模塊分別封裝成函數(shù),提供給對(duì)應(yīng)的應(yīng)用層調(diào)用。
上面其實(shí)也說了:電機(jī)驅(qū)動(dòng)(比如IO時(shí)鐘、PWM配置)封裝成一個(gè)函數(shù),這其實(shí)就是一個(gè)小模塊。 當(dāng)然,這里的驅(qū)動(dòng)函數(shù)只是一個(gè)小模塊,然后還需要進(jìn)一步封裝成“大模塊”。
比如:我這里還引入一個(gè)編碼器,閉環(huán)檢測(cè)電機(jī)速度,通過底層電機(jī)驅(qū)動(dòng)、加減速算法,編碼器等整合成一個(gè)電機(jī)運(yùn)動(dòng)的函數(shù)(模塊):MOTOR_Ctrl(速度,方向)。這就是一個(gè)大模塊(當(dāng)然,還可以結(jié)合需求再進(jìn)一步封裝)。
最后,還有很多重要的編程思想,需要開發(fā)者了解并掌握,在一定程度上,你的編程思想決定了你是新手級(jí)別,還是大神級(jí)別。
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44621瀏覽量
638624 -
無線通信
+關(guān)注
關(guān)注
58文章
4606瀏覽量
143898 -
電機(jī)驅(qū)動(dòng)
+關(guān)注
關(guān)注
60文章
1227瀏覽量
86941
原文標(biāo)題:?jiǎn)纹瑱C(jī)項(xiàng)目有必要分層設(shè)計(jì)嗎?
文章出處:【微信號(hào):玩點(diǎn)嵌入式,微信公眾號(hào):玩點(diǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
初學(xué)單片機(jī)有必要用單片機(jī)學(xué)習(xí)板嗎?
淺談單片機(jī)程序設(shè)計(jì)中的“分層思想”
學(xué)習(xí)單片機(jī)真的有必要學(xué)習(xí)匯編
MCU級(jí)軟件有必要分層嗎
單片機(jī)晶振的必要性_單片機(jī)晶振的作用_單片機(jī)晶振電路原理(51單片機(jī))
51單片機(jī)和STM32單片機(jī)有哪些區(qū)別
![51<b class='flag-5'>單片機(jī)</b>和STM32<b class='flag-5'>單片機(jī)</b><b class='flag-5'>有</b>哪些區(qū)別](https://file.elecfans.com/web1/M00/A2/E4/o4YBAF1SYqyAKB6MAAjtPkSaiW8907.png)
單片機(jī)程序應(yīng)用、驅(qū)動(dòng)分層獨(dú)立開發(fā)方案
![<b class='flag-5'>單片機(jī)</b>程序應(yīng)用、驅(qū)動(dòng)<b class='flag-5'>分層</b>獨(dú)立開發(fā)方案](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于proteus學(xué)習(xí)51單片機(jī)的項(xiàng)目資料
![基于proteus學(xué)習(xí)51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>項(xiàng)目</b>資料](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論