單片機小白學(xué)步(16) 單片機/計算機系統(tǒng)概述:模塊化思想
思想篇對后面的具體知識學(xué)習(xí)進行整體的框架介紹,解釋一些基礎(chǔ)名詞,以及對學(xué)習(xí)思想方法進行總結(jié)。思想篇的內(nèi)容,對于后面的學(xué)習(xí)有很大的指導(dǎo)作用,尤其是模塊化思想將會貫穿整個學(xué)習(xí)篇的知識體系。思想篇并不僅限于接下來的幾篇文章,還會在學(xué)習(xí)篇中通過話題的形式穿插講解。
本文引用地址:http://m.butianyuan.cn/article/201611/318517.htm閱讀建議:如果還沒有涉及到實踐,閱讀時不一定能對思想方法有深刻的認識,看的時候有個大致的認識就可以了。在具體實踐的時候,可以根據(jù)需要再回來看一看。
==================================
為了讓大家更好的理解單片機,從本文開始,會先對單片機/計算機系統(tǒng)進行一個整體的介紹。讓大家對單片機的學(xué)習(xí)和單片機系統(tǒng)的設(shè)計有個比較準確的把握,更好的分清后面各種知識點之間的聯(lián)系,以及它們之間的輕重主次,學(xué)習(xí)起來更加得心應(yīng)手。
在這幾篇里,會涉及到大量新的名詞術(shù)語,而這些也正是很多初學(xué)者遇到的巨大的困難。我會用通俗的語言對它們進行介紹,不需要理解的很透徹,只要有一個大致的認識就可以了。同時,也會涉及單片機和計算機系統(tǒng)的各種設(shè)計思想,以及學(xué)習(xí)時的思路技巧等。
因為單片機和計算機本質(zhì)上沒有太大的區(qū)別,所以這里介紹的內(nèi)容絕不是僅僅局限于51單片機,也不只是單片機,而是包含計算機在內(nèi)的各種微機系統(tǒng)。廢話不多說,下面進入正題。
模塊化思想
模塊化是一個很重要的思想,它的應(yīng)用不僅僅局限在單片機等技術(shù)方面,還體現(xiàn)在我們的身體構(gòu)造,體現(xiàn)在人類社會生產(chǎn)生活中的方方面面。何為模塊化思想呢?按照我的理解,模塊化思想有幾個特點,下面一一道來。
1、分工合作與專一
對生物學(xué)有基本認識的人都知道,包括人在內(nèi)的很多動物是由多種器官構(gòu)成的,例如大腦負責思考,心臟負責輸送血液等。每個器官或組織負責幾項功能,各個器官之間協(xié)調(diào)工作,共同構(gòu)成一個復(fù)雜的整體。
在人類社會中,分工合作的現(xiàn)象也是很常見的。生活中需要吃飯穿衣,在比較落后的年代,可能有一些自給自足的經(jīng)濟形式,自己勞動滿足最基本的生活需求。而在現(xiàn)代社會,人的需求越來越多,不可能全部靠自己生產(chǎn)。每個人都專注于自己的特長,例如農(nóng)民負責種植糧食,服裝工人負責制造衣服,養(yǎng)殖戶負責養(yǎng)殖,程序員負責編寫程序等。各種人分工合作,最后互相交換勞動成果。當一個人長期專注于一件事,而不用擔心自己其他的需求時,這個人能把這件事做得更好,總體上來看,社會的生產(chǎn)力也就大大提高了。
2、模塊抽象
如果對電腦的基本組成有所了解,可以知道電腦由CPU、內(nèi)存、硬盤、主板、顯示器等幾部分組成。如果想在電腦中存儲更多的電影,可以考慮更換更大的硬盤。我們只需要知道硬盤是電腦中負責存儲的部件,而不關(guān)注硬盤內(nèi)部的構(gòu)造。因為每個模塊都是高度抽象的,內(nèi)部原理可能很復(fù)雜,但是對外部而言,它只是一個能完成特定功能的黑盒子。這樣抽象的好處,就是在更換硬盤時,只需要從外部對硬盤有一個抽象的認識,就能輕松解決問題,剩下的就只是花錢購買硬盤了。
3、分層
如果讓你管理一個龐大的公司,你會怎么管理?分層管理將會是一個很好的選擇。
你可以根據(jù)實際情況將公司分為幾個部門,研發(fā)部、營銷部、財務(wù)部、人事后勤部等。每個部門指派幾個負責人進行管理,每個部門負責指定的工作。而具體到研發(fā)部,管理人員為了便于管理,又可能將其分為軟件部、硬件部等;而到了軟件部,又會有不同的團隊,移動客戶端開發(fā)、服務(wù)器端開發(fā)等等。這樣一層一層進行分下來,每個人各司其職,也體現(xiàn)了分工合作的特點。
如果你是公司的老總,當發(fā)現(xiàn)這個月公司的軟件產(chǎn)品開發(fā)進度非常慢時,可能會直接叫來研發(fā)部的總管大發(fā)雷霆:“公司的XX軟件開發(fā)太慢了,你看人家公司的同類產(chǎn)品早就發(fā)布出去了。這件事你得盡快給我搞定,要不然就走人!”然后指令一層一層的下達到了最下層的員工,最底層的程序猿們就又要加班加點拼命的干活了。研發(fā)進度慢或許只是因為有幾個程序員最近有事請假了,但是在這個過程中,你不需要過多關(guān)注底層的細節(jié),你也沒有太多精力去關(guān)注,而只是把整個研發(fā)部當做一個抽象的整體去對待,這也體現(xiàn)了模塊抽象的特點。
模塊化設(shè)計的方法原則
前面說了模塊化思想的特點,模塊化思想應(yīng)用很廣泛,而根據(jù)這種思想設(shè)計系統(tǒng),就是模塊化設(shè)計了。不只是單片機系統(tǒng),計算機軟硬件系統(tǒng)也可以充分利用模塊化設(shè)計。這里先說一說模塊化設(shè)計的方法思路。
對于初學(xué)者,對此只需要先有個大概的認識,沒有實際設(shè)計過,對這些思想也不容易有所感觸;后來需要設(shè)計實際系統(tǒng)時,有需要回來再看看這篇就好了。
1、自頂向下,逐步求精;邏輯設(shè)計與物理實現(xiàn)分離;自底向上
當要設(shè)計一個比較復(fù)雜的系統(tǒng)時,常常會先畫框圖,每個框表示一個抽象的功能模塊。通過框圖可以設(shè)計這些模塊之間的邏輯關(guān)系,然后再細化去設(shè)計每個模塊。而這樣一個模塊可能也比較復(fù)雜,這時又會將其拆分為更小的模塊。這樣一步一步的拆分模塊,直到最后技術(shù)細節(jié)實現(xiàn)。這就是自頂向下的設(shè)計方法,將一個復(fù)雜問題進行分解,逐步求精。而框圖的設(shè)計則是模塊之間的邏輯設(shè)計,邏輯設(shè)計與每個模塊的具體物理實現(xiàn)可以完全分離。
和自頂向下的設(shè)計方法相比,還有一種恰恰相反的思路:自底向上。先設(shè)計出一些核心模塊,然后再逐步進行擴展和完善。完全的自底向上的方法只適合設(shè)計小型的系統(tǒng)。在實際應(yīng)用中,往往是結(jié)合這兩種方法進行設(shè)計。
2、模塊獨立,減小耦合度
模塊化設(shè)計中很重要的一個思想是模塊獨立,減小模塊之間的耦合度。也就是說,每個模塊負責完成自己的功能,不同的模塊之間關(guān)聯(lián)要盡可能小,以免互相影響。
想給電腦換一個更大的硬盤時,一般不用考慮內(nèi)存等其他模塊會不會受到影響,要不然實在是太麻煩了。因為電腦的模塊化設(shè)計非常規(guī)范,模塊之間的關(guān)聯(lián)很小。
減小耦合度這種看似簡單的問題,實際上在設(shè)計的時候卻相當麻煩,為了減小耦合度,需要使用很多技術(shù)來完成,后面會在實際操作中進行介紹。
3、模塊標準化,可代換
有同學(xué)覺得自己的電腦反應(yīng)太慢,網(wǎng)上一查,原來電腦慢很大可能是因為機械硬盤的速度太慢。相比硬盤,CPU和內(nèi)存要快很多,所以就如木桶效應(yīng),電腦被最慢的硬盤給拖慢了速度。于是就給電腦換上了固態(tài)硬盤,頓時速度快了很多。
固態(tài)硬盤和機械硬盤的內(nèi)部結(jié)構(gòu)是完全不一樣的。機械硬盤是依靠磁性盤片存儲數(shù)據(jù)的,讀寫時需要機械結(jié)構(gòu)帶動盤片轉(zhuǎn)動,機械轉(zhuǎn)動速度不能太快(2.5寸機械硬盤以7200轉(zhuǎn)每分鐘的速度旋轉(zhuǎn),盤片邊緣的速度能達到86km/h),太快了盤片可能會直接破裂,或者發(fā)熱量巨大,所以讀寫速度遠遠沒有電子器件快。而固態(tài)硬盤使用的就是電子芯片來實現(xiàn)數(shù)據(jù)存儲,所以速度非常快。
兩種硬盤雖然原理和性能差距都很大,但是卻能很輕松的安裝在同一臺電腦上,只要保證一些參數(shù)匹配,例如都是2.5寸的。這是因為現(xiàn)有的不同硬盤設(shè)計的都是標準化的,硬盤的尺寸、接口等都有標準規(guī)范,所以能很輕松的代換。
4、模塊通用性,適用于多種產(chǎn)品
幾年以前的手機等數(shù)碼產(chǎn)品,不同品牌、不同設(shè)備分別由不同的人和公司設(shè)計,充電的接口各不相同,充電器也都是每個數(shù)碼產(chǎn)品專門配備一套,出門旅行帶的數(shù)碼產(chǎn)品一多,僅僅是大大小小的各種充電器就夠讓人煩了。而且充電器壞了只能重新買配套的充電器。這樣的設(shè)計浪費了很多資源,也給人們的生活帶來了很大的不便。
而近幾年,MP3、MP4、手機等數(shù)碼產(chǎn)品的充電器接口慢慢被統(tǒng)一起來,很多設(shè)備都可以使用通用的USB充電頭和數(shù)據(jù)線進行充電。對于用戶來說方便多了;對于設(shè)備制造商來說,也不是很有必要單獨設(shè)計充電器,直接用標準充電器就可以了;還節(jié)約了資源,例如有些數(shù)碼設(shè)備充電器是可以選配的,有充電器就不用再進行購買了。通用的充電頭和手機充電接口設(shè)計,使得一個充電器可以用于多種產(chǎn)品。
通用性和前面一點標準化,兩者其實都可以理解成,設(shè)計一個模塊或系統(tǒng),都要遵循一定的標準化規(guī)范。一個標準化的模塊,可以應(yīng)用于不同的系統(tǒng)(通用充電器給多種設(shè)備充電);而符合統(tǒng)一標準的多個同類模塊,可以用于同一個系統(tǒng)(機械硬盤和固態(tài)硬盤都能裝進電腦)。
模塊化設(shè)計的優(yōu)缺點
前面通過舉例,已經(jīng)明確的體現(xiàn)了模塊化設(shè)計的很多優(yōu)點,這里對其特點進行一個總結(jié)。
1、便于分工合作
對于一個實際產(chǎn)品,很多時候不是一個人開發(fā)的,而是很多人共同開發(fā)。這里的原因有很多,可能是因為時間比較緊,例如公司之間的競爭,誰最先開發(fā)并發(fā)布新的產(chǎn)品,就最有可能搶占市場;可能是因為系統(tǒng)太龐大,一個人一輩子也做不完,例如操作系統(tǒng)的代碼量往往能達到幾百萬行;分工合作還會提高整體效率,前面已經(jīng)說過了。
多個人開發(fā)同一個系統(tǒng),模塊化開發(fā)是最好的選擇。一些人專注于一個領(lǐng)域,例如安卓程序、平面設(shè)計、服務(wù)器等,每個人負責開發(fā)和他的專注領(lǐng)域匹配的小模塊,而另外一些知識面比較廣、經(jīng)驗豐富的人,負責模塊之間的邏輯組合,最后將整個系統(tǒng)整合到一起。這個過程也可能會有分層,系統(tǒng)分成大的模塊,再拆分成小的模塊,逐層分解并實現(xiàn)。
2、提高開發(fā)效率
一方面,分工合作的方式能提高效率;另一方面,運用已經(jīng)實現(xiàn)好的模塊,像積木一樣搭建新的系統(tǒng),更是讓效率大大提高。
模塊的開發(fā),可能是很多人分別完成的,也可能是同一個人在不同時期完成的,還有可能是從別人那免費獲得或購買的。
具體到單片機的學(xué)習(xí),其實一開始我們就在使用別人的模塊。單片機、各種元件都是別人生產(chǎn)好的,運用這些模塊,我們很快的搭建了自己的開發(fā)板。
同樣的道理,在后面的詳細學(xué)習(xí)過程中,我希望大家每次學(xué)完一個技術(shù)知識,就自己實現(xiàn)一個程序模塊,例如數(shù)碼管的驅(qū)動程序(雖然現(xiàn)在你可能還不理解這是什么)。到整個知識都快學(xué)完了,就有了一套自己的程序庫,也就是全套的模塊程序。
時間久了,或許你就有點記不清數(shù)碼管驅(qū)動當初是怎么寫的了。但是沒關(guān)系,只要你寫好了自己的程序模塊,并且給出了規(guī)范的使用說明,需要時直接照著說明去用就可以了,而不需要再去復(fù)習(xí)一遍前面的知識。所以在后面開發(fā)自己的單片機系統(tǒng)時,直接用自己開發(fā)好的模塊,就能極大的提高開發(fā)效率。
而在后面具體技術(shù)的學(xué)習(xí)中,我也會詳細的分析,如何才能盡可能好的實現(xiàn)每一個模塊,用到哪些技術(shù)知識,幫助大家一起搭建自己的程序庫。
3、能開發(fā)出復(fù)雜系統(tǒng)
分工合作,使得人們能開發(fā)出一個人有生之年根本完成不了的、很龐大的系統(tǒng)。
而對于個人開發(fā)系統(tǒng)來說,如果你花幾個月寫一個比較龐大的程序,寫到后面可能就忘記了前面的程序是怎么寫的,這樣可能會影響程序的繼續(xù)編寫。這時你可能需要回過頭來再看以前的程序,但程序畢竟不是自然語言,看起來還是比較費勁的,很可能后來你自己也很難看懂了,至少是需要很多時間才能看懂。等你終于看懂了前面的東西,發(fā)現(xiàn)后面的代碼又忘了。
而模塊化的設(shè)計方法,你可以在一個小的時間段里,設(shè)計一個小的模塊,并把它做的足夠好,然后對整個模塊編寫一個自己能看懂的使用說明。以后要用這個模塊,就把它當做一個抽象的整體,不需要關(guān)注模塊內(nèi)部細節(jié)實現(xiàn),直接看使用說明就行了。這樣,你才更有可能獨立開發(fā)一個比較龐大的程序。
4、便于維護和查錯
便于維護也是模塊化很重要的一個特點。模塊化講究降低模塊間的耦合度,一個不是很核心的模塊出了問題,往往不會對其他模塊造成很大影響,只會表現(xiàn)出系統(tǒng)中的一些功能無法使用(當然,如果核心模塊例如電腦CPU出了問題,可能會導(dǎo)致整個系統(tǒng)崩潰)。這時你可以直接判斷出哪個模塊有問題,然后去修復(fù)那個模塊,大大縮小了檢查錯誤的范圍。
不知道大家對前面《單片機程序下載失敗總結(jié)》的那篇文章還有沒有印象,文中提到,下載失敗時,如果你能有一套正常下載程序的電腦、下載線、單片機系統(tǒng)板裝備,通過替換的方法,很快就能確定問題是否出在你的電腦上。從這里可以看出來模塊化思想在查錯時的重大意義。
5、缺點
任何事物都有兩面性,模塊化思想也不例外。這里我簡單說一下。
不知道大家有沒有聽說過這樣的話,很多互聯(lián)網(wǎng)公司都是“三個人拿四個人的錢干五個人的活”。為什么很多互聯(lián)網(wǎng)公司工作非常累,工資很高,但是老板卻不愿意降低工資多招聘一些人,同時讓員工能更輕松呢?
有本書叫《人月神話》,里面就解釋了這個問題的原因。人月是一個單位,表示一個人一個月能完成的工作量。按照人月理論,6個人月的工作兩個人需要三個月完成,而三個人則只需要兩個月。而事實是,在互聯(lián)網(wǎng)公司,三個人往往需要遠遠不止兩個月,甚至三個月還完成不了任務(wù),人月理論只是一個不可能的神話。
為什么會這樣呢?原因是多個人設(shè)計同一個系統(tǒng),人與人之間需要溝通,人越多溝通需要的成本越大。所以招聘更多的人,意味著浪費掉更多的溝通成本。
如果把每個人看做一個模塊,人月神話說明了,過多的模塊會增加模塊之間的交流成本,從而降低系統(tǒng)效率;而在模塊特別多、關(guān)系很密切的時候,保持模塊的獨立性和模塊之間的匹配,本身就成了很大的難題。
但是總體來說,模塊化的優(yōu)點遠大于缺點,有些時候模塊化也是不得已而為之的,而一些缺點往往是在特定情況下才有的。
=======================================================
評論