新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)小白學(xué)步(16) 單片機(jī)/計(jì)算機(jī)系統(tǒng)概述:模塊化思想

單片機(jī)小白學(xué)步(16) 單片機(jī)/計(jì)算機(jī)系統(tǒng)概述:模塊化思想

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
截至目前,單片機(jī)入門篇的介紹就告一段落了。從本文開始將進(jìn)入思想篇的學(xué)習(xí)。

思想篇對(duì)后面的具體知識(shí)學(xué)習(xí)進(jìn)行整體的框架介紹,解釋一些基礎(chǔ)名詞,以及對(duì)學(xué)習(xí)思想方法進(jìn)行總結(jié)。思想篇的內(nèi)容,對(duì)于后面的學(xué)習(xí)有很大的指導(dǎo)作用,尤其是模塊化思想將會(huì)貫穿整個(gè)學(xué)習(xí)篇的知識(shí)體系。思想篇并不僅限于接下來(lái)的幾篇文章,還會(huì)在學(xué)習(xí)篇中通過(guò)話題的形式穿插講解。

本文引用地址:http://butianyuan.cn/article/201611/318517.htm

閱讀建議:如果還沒(méi)有涉及到實(shí)踐,閱讀時(shí)不一定能對(duì)思想方法有深刻的認(rèn)識(shí),看的時(shí)候有個(gè)大致的認(rèn)識(shí)就可以了。在具體實(shí)踐的時(shí)候,可以根據(jù)需要再回來(lái)看一看。

==================================

為了讓大家更好的理解單片機(jī),從本文開始,會(huì)先對(duì)單片機(jī)/計(jì)算機(jī)系統(tǒng)進(jìn)行一個(gè)整體的介紹。讓大家對(duì)單片機(jī)的學(xué)習(xí)和單片機(jī)系統(tǒng)的設(shè)計(jì)有個(gè)比較準(zhǔn)確的把握,更好的分清后面各種知識(shí)點(diǎn)之間的聯(lián)系,以及它們之間的輕重主次,學(xué)習(xí)起來(lái)更加得心應(yīng)手。

在這幾篇里,會(huì)涉及到大量新的名詞術(shù)語(yǔ),而這些也正是很多初學(xué)者遇到的巨大的困難。我會(huì)用通俗的語(yǔ)言對(duì)它們進(jìn)行介紹,不需要理解的很透徹,只要有一個(gè)大致的認(rèn)識(shí)就可以了。同時(shí),也會(huì)涉及單片機(jī)和計(jì)算機(jī)系統(tǒng)的各種設(shè)計(jì)思想,以及學(xué)習(xí)時(shí)的思路技巧等。

因?yàn)閱纹瑱C(jī)和計(jì)算機(jī)本質(zhì)上沒(méi)有太大的區(qū)別,所以這里介紹的內(nèi)容絕不是僅僅局限于51單片機(jī),也不只是單片機(jī),而是包含計(jì)算機(jī)在內(nèi)的各種微機(jī)系統(tǒng)。廢話不多說(shuō),下面進(jìn)入正題。

模塊化思想

模塊化是一個(gè)很重要的思想,它的應(yīng)用不僅僅局限在單片機(jī)等技術(shù)方面,還體現(xiàn)在我們的身體構(gòu)造,體現(xiàn)在人類社會(huì)生產(chǎn)生活中的方方面面。何為模塊化思想呢?按照我的理解,模塊化思想有幾個(gè)特點(diǎn),下面一一道來(lái)。

1、分工合作與專一

對(duì)生物學(xué)有基本認(rèn)識(shí)的人都知道,包括人在內(nèi)的很多動(dòng)物是由多種器官構(gòu)成的,例如大腦負(fù)責(zé)思考,心臟負(fù)責(zé)輸送血液等。每個(gè)器官或組織負(fù)責(zé)幾項(xiàng)功能,各個(gè)器官之間協(xié)調(diào)工作,共同構(gòu)成一個(gè)復(fù)雜的整體。

在人類社會(huì)中,分工合作的現(xiàn)象也是很常見的。生活中需要吃飯穿衣,在比較落后的年代,可能有一些自給自足的經(jīng)濟(jì)形式,自己勞動(dòng)滿足最基本的生活需求。而在現(xiàn)代社會(huì),人的需求越來(lái)越多,不可能全部靠自己生產(chǎn)。每個(gè)人都專注于自己的特長(zhǎng),例如農(nóng)民負(fù)責(zé)種植糧食,服裝工人負(fù)責(zé)制造衣服,養(yǎng)殖戶負(fù)責(zé)養(yǎng)殖,程序員負(fù)責(zé)編寫程序等。各種人分工合作,最后互相交換勞動(dòng)成果。當(dāng)一個(gè)人長(zhǎng)期專注于一件事,而不用擔(dān)心自己其他的需求時(shí),這個(gè)人能把這件事做得更好,總體上來(lái)看,社會(huì)的生產(chǎn)力也就大大提高了。

2、模塊抽象

如果對(duì)電腦的基本組成有所了解,可以知道電腦由CPU、內(nèi)存、硬盤、主板、顯示器等幾部分組成。如果想在電腦中存儲(chǔ)更多的電影,可以考慮更換更大的硬盤。我們只需要知道硬盤是電腦中負(fù)責(zé)存儲(chǔ)的部件,而不關(guān)注硬盤內(nèi)部的構(gòu)造。因?yàn)槊總€(gè)模塊都是高度抽象的,內(nèi)部原理可能很復(fù)雜,但是對(duì)外部而言,它只是一個(gè)能完成特定功能的黑盒子。這樣抽象的好處,就是在更換硬盤時(shí),只需要從外部對(duì)硬盤有一個(gè)抽象的認(rèn)識(shí),就能輕松解決問(wèn)題,剩下的就只是花錢購(gòu)買硬盤了。

3、分層

如果讓你管理一個(gè)龐大的公司,你會(huì)怎么管理?分層管理將會(huì)是一個(gè)很好的選擇。

你可以根據(jù)實(shí)際情況將公司分為幾個(gè)部門,研發(fā)部、營(yíng)銷部、財(cái)務(wù)部、人事后勤部等。每個(gè)部門指派幾個(gè)負(fù)責(zé)人進(jìn)行管理,每個(gè)部門負(fù)責(zé)指定的工作。而具體到研發(fā)部,管理人員為了便于管理,又可能將其分為軟件部、硬件部等;而到了軟件部,又會(huì)有不同的團(tuán)隊(duì),移動(dòng)客戶端開發(fā)、服務(wù)器端開發(fā)等等。這樣一層一層進(jìn)行分下來(lái),每個(gè)人各司其職,也體現(xiàn)了分工合作的特點(diǎn)。

如果你是公司的老總,當(dāng)發(fā)現(xiàn)這個(gè)月公司的軟件產(chǎn)品開發(fā)進(jìn)度非常慢時(shí),可能會(huì)直接叫來(lái)研發(fā)部的總管大發(fā)雷霆:“公司的XX軟件開發(fā)太慢了,你看人家公司的同類產(chǎn)品早就發(fā)布出去了。這件事你得盡快給我搞定,要不然就走人!”然后指令一層一層的下達(dá)到了最下層的員工,最底層的程序猿們就又要加班加點(diǎn)拼命的干活了。研發(fā)進(jìn)度慢或許只是因?yàn)橛袔讉€(gè)程序員最近有事請(qǐng)假了,但是在這個(gè)過(guò)程中,你不需要過(guò)多關(guān)注底層的細(xì)節(jié),你也沒(méi)有太多精力去關(guān)注,而只是把整個(gè)研發(fā)部當(dāng)做一個(gè)抽象的整體去對(duì)待,這也體現(xiàn)了模塊抽象的特點(diǎn)。

模塊化設(shè)計(jì)的方法原則

前面說(shuō)了模塊化思想的特點(diǎn),模塊化思想應(yīng)用很廣泛,而根據(jù)這種思想設(shè)計(jì)系統(tǒng),就是模塊化設(shè)計(jì)了。不只是單片機(jī)系統(tǒng),計(jì)算機(jī)軟硬件系統(tǒng)也可以充分利用模塊化設(shè)計(jì)。這里先說(shuō)一說(shuō)模塊化設(shè)計(jì)的方法思路。

對(duì)于初學(xué)者,對(duì)此只需要先有個(gè)大概的認(rèn)識(shí),沒(méi)有實(shí)際設(shè)計(jì)過(guò),對(duì)這些思想也不容易有所感觸;后來(lái)需要設(shè)計(jì)實(shí)際系統(tǒng)時(shí),有需要回來(lái)再看看這篇就好了。

1、自頂向下,逐步求精;邏輯設(shè)計(jì)與物理實(shí)現(xiàn)分離;自底向上

當(dāng)要設(shè)計(jì)一個(gè)比較復(fù)雜的系統(tǒng)時(shí),常常會(huì)先畫框圖,每個(gè)框表示一個(gè)抽象的功能模塊。通過(guò)框圖可以設(shè)計(jì)這些模塊之間的邏輯關(guān)系,然后再細(xì)化去設(shè)計(jì)每個(gè)模塊。而這樣一個(gè)模塊可能也比較復(fù)雜,這時(shí)又會(huì)將其拆分為更小的模塊。這樣一步一步的拆分模塊,直到最后技術(shù)細(xì)節(jié)實(shí)現(xiàn)。這就是自頂向下的設(shè)計(jì)方法,將一個(gè)復(fù)雜問(wèn)題進(jìn)行分解,逐步求精。而框圖的設(shè)計(jì)則是模塊之間的邏輯設(shè)計(jì),邏輯設(shè)計(jì)與每個(gè)模塊的具體物理實(shí)現(xiàn)可以完全分離。

和自頂向下的設(shè)計(jì)方法相比,還有一種恰恰相反的思路:自底向上。先設(shè)計(jì)出一些核心模塊,然后再逐步進(jìn)行擴(kuò)展和完善。完全的自底向上的方法只適合設(shè)計(jì)小型的系統(tǒng)。在實(shí)際應(yīng)用中,往往是結(jié)合這兩種方法進(jìn)行設(shè)計(jì)。

2、模塊獨(dú)立,減小耦合度

模塊化設(shè)計(jì)中很重要的一個(gè)思想是模塊獨(dú)立,減小模塊之間的耦合度。也就是說(shuō),每個(gè)模塊負(fù)責(zé)完成自己的功能,不同的模塊之間關(guān)聯(lián)要盡可能小,以免互相影響。

想給電腦換一個(gè)更大的硬盤時(shí),一般不用考慮內(nèi)存等其他模塊會(huì)不會(huì)受到影響,要不然實(shí)在是太麻煩了。因?yàn)殡娔X的模塊化設(shè)計(jì)非常規(guī)范,模塊之間的關(guān)聯(lián)很小。

減小耦合度這種看似簡(jiǎn)單的問(wèn)題,實(shí)際上在設(shè)計(jì)的時(shí)候卻相當(dāng)麻煩,為了減小耦合度,需要使用很多技術(shù)來(lái)完成,后面會(huì)在實(shí)際操作中進(jìn)行介紹。

3、模塊標(biāo)準(zhǔn)化,可代換

有同學(xué)覺(jué)得自己的電腦反應(yīng)太慢,網(wǎng)上一查,原來(lái)電腦慢很大可能是因?yàn)闄C(jī)械硬盤的速度太慢。相比硬盤,CPU和內(nèi)存要快很多,所以就如木桶效應(yīng),電腦被最慢的硬盤給拖慢了速度。于是就給電腦換上了固態(tài)硬盤,頓時(shí)速度快了很多。

固態(tài)硬盤和機(jī)械硬盤的內(nèi)部結(jié)構(gòu)是完全不一樣的。機(jī)械硬盤是依靠磁性盤片存儲(chǔ)數(shù)據(jù)的,讀寫時(shí)需要機(jī)械結(jié)構(gòu)帶動(dòng)盤片轉(zhuǎn)動(dòng),機(jī)械轉(zhuǎn)動(dòng)速度不能太快(2.5寸機(jī)械硬盤以7200轉(zhuǎn)每分鐘的速度旋轉(zhuǎn),盤片邊緣的速度能達(dá)到86km/h),太快了盤片可能會(huì)直接破裂,或者發(fā)熱量巨大,所以讀寫速度遠(yuǎn)遠(yuǎn)沒(méi)有電子器件快。而固態(tài)硬盤使用的就是電子芯片來(lái)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),所以速度非??臁?/p>

兩種硬盤雖然原理和性能差距都很大,但是卻能很輕松的安裝在同一臺(tái)電腦上,只要保證一些參數(shù)匹配,例如都是2.5寸的。這是因?yàn)楝F(xiàn)有的不同硬盤設(shè)計(jì)的都是標(biāo)準(zhǔn)化的,硬盤的尺寸、接口等都有標(biāo)準(zhǔn)規(guī)范,所以能很輕松的代換。

4、模塊通用性,適用于多種產(chǎn)品

幾年以前的手機(jī)等數(shù)碼產(chǎn)品,不同品牌、不同設(shè)備分別由不同的人和公司設(shè)計(jì),充電的接口各不相同,充電器也都是每個(gè)數(shù)碼產(chǎn)品專門配備一套,出門旅行帶的數(shù)碼產(chǎn)品一多,僅僅是大大小小的各種充電器就夠讓人煩了。而且充電器壞了只能重新買配套的充電器。這樣的設(shè)計(jì)浪費(fèi)了很多資源,也給人們的生活帶來(lái)了很大的不便。

而近幾年,MP3、MP4、手機(jī)等數(shù)碼產(chǎn)品的充電器接口慢慢被統(tǒng)一起來(lái),很多設(shè)備都可以使用通用的USB充電頭和數(shù)據(jù)線進(jìn)行充電。對(duì)于用戶來(lái)說(shuō)方便多了;對(duì)于設(shè)備制造商來(lái)說(shuō),也不是很有必要單獨(dú)設(shè)計(jì)充電器,直接用標(biāo)準(zhǔn)充電器就可以了;還節(jié)約了資源,例如有些數(shù)碼設(shè)備充電器是可以選配的,有充電器就不用再進(jìn)行購(gòu)買了。通用的充電頭和手機(jī)充電接口設(shè)計(jì),使得一個(gè)充電器可以用于多種產(chǎn)品。

通用性和前面一點(diǎn)標(biāo)準(zhǔn)化,兩者其實(shí)都可以理解成,設(shè)計(jì)一個(gè)模塊或系統(tǒng),都要遵循一定的標(biāo)準(zhǔn)化規(guī)范。一個(gè)標(biāo)準(zhǔn)化的模塊,可以應(yīng)用于不同的系統(tǒng)(通用充電器給多種設(shè)備充電);而符合統(tǒng)一標(biāo)準(zhǔn)的多個(gè)同類模塊,可以用于同一個(gè)系統(tǒng)(機(jī)械硬盤和固態(tài)硬盤都能裝進(jìn)電腦)。

模塊化設(shè)計(jì)的優(yōu)缺點(diǎn)

前面通過(guò)舉例,已經(jīng)明確的體現(xiàn)了模塊化設(shè)計(jì)的很多優(yōu)點(diǎn),這里對(duì)其特點(diǎn)進(jìn)行一個(gè)總結(jié)。

1、便于分工合作

對(duì)于一個(gè)實(shí)際產(chǎn)品,很多時(shí)候不是一個(gè)人開發(fā)的,而是很多人共同開發(fā)。這里的原因有很多,可能是因?yàn)闀r(shí)間比較緊,例如公司之間的競(jìng)爭(zhēng),誰(shuí)最先開發(fā)并發(fā)布新的產(chǎn)品,就最有可能搶占市場(chǎng);可能是因?yàn)橄到y(tǒng)太龐大,一個(gè)人一輩子也做不完,例如操作系統(tǒng)的代碼量往往能達(dá)到幾百萬(wàn)行;分工合作還會(huì)提高整體效率,前面已經(jīng)說(shuō)過(guò)了。

多個(gè)人開發(fā)同一個(gè)系統(tǒng),模塊化開發(fā)是最好的選擇。一些人專注于一個(gè)領(lǐng)域,例如安卓程序、平面設(shè)計(jì)、服務(wù)器等,每個(gè)人負(fù)責(zé)開發(fā)和他的專注領(lǐng)域匹配的小模塊,而另外一些知識(shí)面比較廣、經(jīng)驗(yàn)豐富的人,負(fù)責(zé)模塊之間的邏輯組合,最后將整個(gè)系統(tǒng)整合到一起。這個(gè)過(guò)程也可能會(huì)有分層,系統(tǒng)分成大的模塊,再拆分成小的模塊,逐層分解并實(shí)現(xiàn)。

2、提高開發(fā)效率

一方面,分工合作的方式能提高效率;另一方面,運(yùn)用已經(jīng)實(shí)現(xiàn)好的模塊,像積木一樣搭建新的系統(tǒng),更是讓效率大大提高。

模塊的開發(fā),可能是很多人分別完成的,也可能是同一個(gè)人在不同時(shí)期完成的,還有可能是從別人那免費(fèi)獲得或購(gòu)買的。

具體到單片機(jī)的學(xué)習(xí),其實(shí)一開始我們就在使用別人的模塊。單片機(jī)、各種元件都是別人生產(chǎn)好的,運(yùn)用這些模塊,我們很快的搭建了自己的開發(fā)板。

同樣的道理,在后面的詳細(xì)學(xué)習(xí)過(guò)程中,我希望大家每次學(xué)完一個(gè)技術(shù)知識(shí),就自己實(shí)現(xiàn)一個(gè)程序模塊,例如數(shù)碼管的驅(qū)動(dòng)程序(雖然現(xiàn)在你可能還不理解這是什么)。到整個(gè)知識(shí)都快學(xué)完了,就有了一套自己的程序庫(kù),也就是全套的模塊程序。

時(shí)間久了,或許你就有點(diǎn)記不清數(shù)碼管驅(qū)動(dòng)當(dāng)初是怎么寫的了。但是沒(méi)關(guān)系,只要你寫好了自己的程序模塊,并且給出了規(guī)范的使用說(shuō)明,需要時(shí)直接照著說(shuō)明去用就可以了,而不需要再去復(fù)習(xí)一遍前面的知識(shí)。所以在后面開發(fā)自己的單片機(jī)系統(tǒng)時(shí),直接用自己開發(fā)好的模塊,就能極大的提高開發(fā)效率。

而在后面具體技術(shù)的學(xué)習(xí)中,我也會(huì)詳細(xì)的分析,如何才能盡可能好的實(shí)現(xiàn)每一個(gè)模塊,用到哪些技術(shù)知識(shí),幫助大家一起搭建自己的程序庫(kù)。

3、能開發(fā)出復(fù)雜系統(tǒng)

分工合作,使得人們能開發(fā)出一個(gè)人有生之年根本完成不了的、很龐大的系統(tǒng)。

而對(duì)于個(gè)人開發(fā)系統(tǒng)來(lái)說(shuō),如果你花幾個(gè)月寫一個(gè)比較龐大的程序,寫到后面可能就忘記了前面的程序是怎么寫的,這樣可能會(huì)影響程序的繼續(xù)編寫。這時(shí)你可能需要回過(guò)頭來(lái)再看以前的程序,但程序畢竟不是自然語(yǔ)言,看起來(lái)還是比較費(fèi)勁的,很可能后來(lái)你自己也很難看懂了,至少是需要很多時(shí)間才能看懂。等你終于看懂了前面的東西,發(fā)現(xiàn)后面的代碼又忘了。

而模塊化的設(shè)計(jì)方法,你可以在一個(gè)小的時(shí)間段里,設(shè)計(jì)一個(gè)小的模塊,并把它做的足夠好,然后對(duì)整個(gè)模塊編寫一個(gè)自己能看懂的使用說(shuō)明。以后要用這個(gè)模塊,就把它當(dāng)做一個(gè)抽象的整體,不需要關(guān)注模塊內(nèi)部細(xì)節(jié)實(shí)現(xiàn),直接看使用說(shuō)明就行了。這樣,你才更有可能獨(dú)立開發(fā)一個(gè)比較龐大的程序。

4、便于維護(hù)和查錯(cuò)

便于維護(hù)也是模塊化很重要的一個(gè)特點(diǎn)。模塊化講究降低模塊間的耦合度,一個(gè)不是很核心的模塊出了問(wèn)題,往往不會(huì)對(duì)其他模塊造成很大影響,只會(huì)表現(xiàn)出系統(tǒng)中的一些功能無(wú)法使用(當(dāng)然,如果核心模塊例如電腦CPU出了問(wèn)題,可能會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰)。這時(shí)你可以直接判斷出哪個(gè)模塊有問(wèn)題,然后去修復(fù)那個(gè)模塊,大大縮小了檢查錯(cuò)誤的范圍。

不知道大家對(duì)前面《單片機(jī)程序下載失敗總結(jié)》的那篇文章還有沒(méi)有印象,文中提到,下載失敗時(shí),如果你能有一套正常下載程序的電腦、下載線、單片機(jī)系統(tǒng)板裝備,通過(guò)替換的方法,很快就能確定問(wèn)題是否出在你的電腦上。從這里可以看出來(lái)模塊化思想在查錯(cuò)時(shí)的重大意義。

5、缺點(diǎn)

任何事物都有兩面性,模塊化思想也不例外。這里我簡(jiǎn)單說(shuō)一下。

不知道大家有沒(méi)有聽說(shuō)過(guò)這樣的話,很多互聯(lián)網(wǎng)公司都是“三個(gè)人拿四個(gè)人的錢干五個(gè)人的活”。為什么很多互聯(lián)網(wǎng)公司工作非常累,工資很高,但是老板卻不愿意降低工資多招聘一些人,同時(shí)讓員工能更輕松呢?

有本書叫《人月神話》,里面就解釋了這個(gè)問(wèn)題的原因。人月是一個(gè)單位,表示一個(gè)人一個(gè)月能完成的工作量。按照人月理論,6個(gè)人月的工作兩個(gè)人需要三個(gè)月完成,而三個(gè)人則只需要兩個(gè)月。而事實(shí)是,在互聯(lián)網(wǎng)公司,三個(gè)人往往需要遠(yuǎn)遠(yuǎn)不止兩個(gè)月,甚至三個(gè)月還完成不了任務(wù),人月理論只是一個(gè)不可能的神話。

為什么會(huì)這樣呢?原因是多個(gè)人設(shè)計(jì)同一個(gè)系統(tǒng),人與人之間需要溝通,人越多溝通需要的成本越大。所以招聘更多的人,意味著浪費(fèi)掉更多的溝通成本。

如果把每個(gè)人看做一個(gè)模塊,人月神話說(shuō)明了,過(guò)多的模塊會(huì)增加模塊之間的交流成本,從而降低系統(tǒng)效率;而在模塊特別多、關(guān)系很密切的時(shí)候,保持模塊的獨(dú)立性和模塊之間的匹配,本身就成了很大的難題。

但是總體來(lái)說(shuō),模塊化的優(yōu)點(diǎn)遠(yuǎn)大于缺點(diǎn),有些時(shí)候模塊化也是不得已而為之的,而一些缺點(diǎn)往往是在特定情況下才有的。

=======================================================



評(píng)論


技術(shù)專區(qū)

關(guān)閉