當(dāng)被人問(wèn)起“什么是嵌入式系統(tǒng)”時(shí),無(wú)需看過(guò)我的文章,有一種狡猾的說(shuō)法肯定是挑不出任何錯(cuò)誤的——套用知乎上一類(lèi)著名的問(wèn)答體,“如何快速的假裝/成為某個(gè)領(lǐng)域的專家”——你可以故作認(rèn)真的說(shuō):
“嵌入式系統(tǒng)首先是一個(gè)計(jì)算機(jī)系統(tǒng)”,然后大談你對(duì)軟件和硬件的看法……
為了在幾乎沒(méi)有逼格的行業(yè)中讓大家能夠有機(jī)會(huì)裝逼,下面我就教大家一種關(guān)于嵌入式系統(tǒng)軟件和硬件的特別觀點(diǎn),絕對(duì)可以讓所有的小師妹小師弟甚至是同齡人偷來(lái)“刮目相看”的眼光。當(dāng)然首先你要真的理解這種說(shuō)法。
為了引起更多人的注意,同時(shí)讓話題更有沖擊性,你應(yīng)該非??隙?、神秘、恨鐵不成鋼而又憤慨的宣布一個(gè)觀點(diǎn):
“你知道么?嵌入式系統(tǒng)中幾乎所有人關(guān)于軟件和硬件的看法都是錯(cuò)誤的……我們被教科書(shū)給坑了!”
1、傳統(tǒng)計(jì)算機(jī)系統(tǒng)中的“軟件/硬件”觀
通常,我們提到計(jì)算機(jī)硬件,腦海里立馬浮現(xiàn)的就是一臺(tái)PC主機(jī),當(dāng)然這個(gè)時(shí)候你要特別小心,因?yàn)檫@個(gè)時(shí)候你舉出的例子很可能是暴露年齡或者逼格的。比如,用臺(tái)式機(jī)舉例還是用筆記本舉例顯然暴露年齡,用Windows筆記本舉例還是Mac舉例將暴露逼格。當(dāng)我們提到軟件,腦海里浮現(xiàn)的差不多就是Windows上跑著的各類(lèi)軟件,當(dāng)然,如果你能用APP,特別是iOS的APP來(lái)舉例,顯然就是很有面子的。
是的,細(xì)心的你注意到了,傳統(tǒng)的軟硬件觀念直接來(lái)源于通用計(jì)算機(jī)。在后面的討論中我們會(huì)發(fā)現(xiàn),這種由通用計(jì)算機(jī)帶來(lái)的思維定勢(shì)是非??膳碌?。
2、嵌入式系統(tǒng)中的“軟/硬件”觀
嵌入式系統(tǒng)中的軟件和硬件并不是你想象的那么簡(jiǎn)單。這其實(shí)很好理解,你可以在大學(xué)校園里隨便攔下幾個(gè)學(xué)生,讓我們來(lái)做一個(gè)采訪,問(wèn)問(wèn)他們什么是軟件什么是硬件:
屌絲A(計(jì)算機(jī)學(xué)院):你丫有病么?硬件就是你的電腦主機(jī)咯,主板、CPU、內(nèi)存硬盤(pán)、顯卡什么的;軟件就是Windows程序咯
屌絲B(信息學(xué)院):硬件就是單片機(jī)啊,51、AVR、STM32之類(lèi)的,對(duì)了,還有開(kāi)發(fā)板也算吧?軟件嘛,就是Firmware咯(固件),過(guò)去用匯編開(kāi)發(fā),現(xiàn)在都是用C了
屌絲C(信息學(xué)院):毛線!我還可以用VHDL和Verlog寫(xiě)一個(gè)內(nèi)核呢,你說(shuō)說(shuō)VHDL和Verilog寫(xiě)出來(lái)的是不是軟件?FPGA是不是硬件?
屌絲B:呃……那咋辦?
屌絲D(計(jì)算機(jī)學(xué)院):你們別忘了,開(kāi)發(fā)板上跑的虛擬機(jī)也是硬件哦,虛擬機(jī)上用Java寫(xiě)的程序也是軟件。
大家可能注意到了,在嵌入式系統(tǒng)中,軟件和硬件是一個(gè)不那么靠譜的定義方式——當(dāng)人們用普通話發(fā)相同的聲音說(shuō)同一個(gè)詞語(yǔ)的時(shí)候,描述的可能根本不是同一個(gè)東西。那么,嵌入式系統(tǒng)中,軟件和硬件應(yīng)該如何理解呢?
方案一 . 要么,你可以假裝從來(lái)沒(méi)有看過(guò)這篇文章,只跟你用相同系統(tǒng)的人討論問(wèn)題,或者“自己根據(jù)語(yǔ)境”自動(dòng)切換軟件和硬件的意思。
方案二 . 要么,我們重新定義一下軟件和硬件的概念,只要這個(gè)概念兼容原有的理解方式就可以了。
真有一種兼容老概念的新定義么?答案是肯定的。讓我們來(lái)首先找一找在不同層面上軟件的共同點(diǎn):大家都是用一種語(yǔ)言(Java、C、VHDL、甚至是原理圖)來(lái)描述自己大腦中的邏輯(思維)。讓我們來(lái)體會(huì)一下這個(gè)特點(diǎn),是不是這么個(gè)特點(diǎn)?因此,我們重新鄭重的定義一下軟件:
軟件:人們借助某種語(yǔ)言,“嘗試”固化下來(lái)的,自己的思維
與之相對(duì),硬件的概念可以修改為:
硬件:業(yè)已固化下來(lái)的邏輯,可以穩(wěn)定的提供確定的服務(wù)和功能
可見(jiàn), 軟件的本質(zhì)是思維,是設(shè)計(jì)人員的思維 ,因而程序設(shè)計(jì)人員最重要的是自己 根據(jù)任務(wù)的需求想通所有的邏輯,并借助一定的語(yǔ)言作為工具,把自己的思維"固化"下來(lái) 。這個(gè)思維的過(guò)程叫做"設(shè)計(jì)(Design)"、這個(gè)固化的過(guò)程叫做"編碼(Coding)"。簡(jiǎn)單的說(shuō),寫(xiě)代碼只是一個(gè)思維翻譯的過(guò)程,更重要的是首先寫(xiě)程序的人要想清楚,擁有清晰的思維,然后借助準(zhǔn)確無(wú)誤的語(yǔ)言表達(dá)能力(很遺憾,很多人語(yǔ)言表達(dá)能力非常有限——就是用C語(yǔ)言寫(xiě)不出自己想要實(shí)現(xiàn)的功能)才能寫(xiě)出正確的代碼。
思維的設(shè)計(jì)有很多輔助工具,如大家熟知的流程圖(Flow Chart)、UML圖、還有大家不太用的數(shù)據(jù)流圖(Data Flow Diagram)等等。然而,具體代碼往往并不是一個(gè)好的輔助工具。進(jìn)行思維設(shè)計(jì)的開(kāi)發(fā)人員,叫做Programmer。
將Programmer的設(shè)計(jì)文檔(各類(lèi)圖表)翻譯成具體程序代碼的人叫做Coder。
說(shuō)殘酷一點(diǎn):Programmer設(shè)計(jì),負(fù)責(zé)思考;Coder翻譯,負(fù)責(zé)干苦力。如果你不服,我也沒(méi)辦法,哈哈哈哈……
**硬件,本質(zhì)上一個(gè)固化下來(lái)的邏輯。**這個(gè)邏輯的前身當(dāng)然是思維,只不過(guò)它被固化下來(lái)了,而且可以"穩(wěn)定"可靠的提供"確定"的功能和服務(wù)。比如,F(xiàn)IFO是隊(duì)列,在某些軟件系統(tǒng)中把這種邏輯確定的模塊叫做"構(gòu)件"(Component),一種中性化的描述,并不強(qiáng)調(diào)它是軟件還是硬件。因?yàn)闃?gòu)件的本質(zhì)是一個(gè)模塊,是一個(gè)可以提供"確定"的,大家都知道的功能的模塊。它可以是硬件的,也可以是軟件的。Who care?有的系統(tǒng)還會(huì)提供硬件抽象層,進(jìn)一步模糊這類(lèi)模塊的軟硬屬性——反正你知道它是做什么的就行了,反正它很可靠,而且可以重復(fù)利用,所以你用就好了,是軟的還是硬的,無(wú)所謂,反正都是同一個(gè)API。
當(dāng)我們想凸顯一個(gè)模塊的邏輯、確定性和穩(wěn)定性,而又不能或者不需要或者不關(guān)心它的軟硬屬性的時(shí)候,我們就干脆叫他構(gòu)件(Component)。
重新定義軟件和硬件的概念,不是一個(gè)文字游戲,而是一個(gè)行業(yè)內(nèi)在心底里約定俗成已經(jīng)默默在做的事情,只是,今天被明確的點(diǎn)破了而已。雖然你覺(jué)得被刷了三觀(也許你沒(méi)有),但仔細(xì)想想,其實(shí)的確和過(guò)去的認(rèn)識(shí)沒(méi)有本質(zhì)上的區(qū)別?
不是么?其實(shí)你早就懂對(duì)么?哈哈哈哈——我沒(méi)有重新發(fā)明軟件或者硬件,我只是誠(chéng)實(shí)的搬運(yùn)工。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3551瀏覽量
129104 -
PC
+關(guān)注
關(guān)注
9文章
2056瀏覽量
153934 -
iOS
+關(guān)注
關(guān)注
8文章
3392瀏覽量
150367 -
計(jì)算機(jī)硬件
+關(guān)注
關(guān)注
0文章
14瀏覽量
7709
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論