當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 嵌入式處理器體系結(jié)構(gòu)
嵌入式處理器體系結(jié)構(gòu)
時(shí)間:2018-09-21 來(lái)源:未知
這個(gè)階段課程淵源已久。上世紀(jì)90年代時(shí)單片機(jī)的大行其道是計(jì)算機(jī)單芯片化的開端。隨著集成電路技術(shù)的發(fā)展,單芯片上集成的功能越來(lái)越強(qiáng),終于在本世紀(jì)初發(fā)展出現(xiàn)了在單芯片上集成復(fù)雜計(jì)算機(jī)系統(tǒng)的技術(shù)(System-on-Chip SOC)。這使得原本需要獨(dú)立運(yùn)行在單獨(dú)的計(jì)算機(jī)上的復(fù)雜的軟件系統(tǒng)可以運(yùn)行在(嵌入)小型的設(shè)備上。這就是“嵌入式系統(tǒng)”。這種系統(tǒng)的核心處理器被稱為“嵌入式處理器”。
在講授這部分課程時(shí),講師應(yīng)當(dāng)讓學(xué)生同時(shí)接觸到Intel架構(gòu)以及ARM架構(gòu)的指令。學(xué)生應(yīng)當(dāng)首先學(xué)習(xí)編寫在操作系統(tǒng)環(huán)境下運(yùn)行的匯編語(yǔ)言程序,然后在無(wú)操作系統(tǒng)環(huán)境下運(yùn)行的裸板程序。歸根結(jié)底,這個(gè)階段課程教給學(xué)員分析和編寫匯編語(yǔ)言程序的一般性方法,而非僅僅針對(duì)某個(gè)體系結(jié)構(gòu)和匯編器。學(xué)員將學(xué)到超越某個(gè)具體指令集的匯編語(yǔ)言能力以及建立在此之上的自底向上的思考整個(gè)計(jì)算機(jī)體系的能力。
傳統(tǒng)誤區(qū)
完全地學(xué)習(xí)處理器體系結(jié)構(gòu)需要具備大量的先修課程(主要是電路類課程),今天的學(xué)生不具備這些先修課程能力。傳統(tǒng)的方式是首先講解處理器體系結(jié)構(gòu),然后講解指令集,再然后講解匯編程序語(yǔ)法,再然后像C語(yǔ)言階段一樣寫一些小程序,再然后...。但是很不幸,教學(xué)實(shí)踐表明,由于無(wú)法安排足夠的課時(shí),這種方式的教學(xué)甚至無(wú)法讓學(xué)員獲得基本的分析和使用匯編代碼的能力。同時(shí)由于處理器能力的增強(qiáng)導(dǎo)致嵌入式軟件體系的復(fù)雜度大大提升的結(jié)果是芯片廠商包辦了底層的諸如Bootloader之類的底層軟件。同時(shí)大部分的嵌入式產(chǎn)品都通過運(yùn)行某種操作系統(tǒng)環(huán)境提供應(yīng)用層支持。直接在無(wú)操作系統(tǒng)環(huán)境下編程的程序員崗位在嵌入式行業(yè)中大大減少。這樣一來(lái),講授裸機(jī)匯編的傳統(tǒng)課程體系和新工程實(shí)踐嚴(yán)重脫節(jié)。
問題分析
問題的根源在于現(xiàn)代程序員對(duì)于匯編語(yǔ)言的需求是很獨(dú)特的。即使是在操作系統(tǒng)核心級(jí)別的代碼中,用匯編語(yǔ)言寫成的代碼總量也不會(huì)很多。而當(dāng)程序員開始和這些代碼打交道時(shí),往往意味著他碰到了關(guān)鍵的核心問題。這個(gè)時(shí)候問題的核心在于整體的軟硬件結(jié)構(gòu)而不是具體的匯編指令。現(xiàn)代的程序員在處理構(gòu)成系統(tǒng)關(guān)鍵部分的匯編代碼時(shí),并不需要像計(jì)算機(jī)發(fā)展的早期時(shí)的匯編程序員那樣精通某種匯編語(yǔ)言的每一個(gè)角落。只要“框架”清晰,指令集的障礙自然可以通過臨時(shí)查閱相關(guān)體系結(jié)構(gòu)的手冊(cè)邁過。但是框架卻不是臨時(shí)能夠建立起來(lái)的。
應(yīng)當(dāng)徹底改變這部分課程以適應(yīng)新的工程實(shí)踐。壓縮繁瑣的匯編指令教學(xué),增加在操作系統(tǒng)環(huán)境下的關(guān)鍵匯編代碼分析和設(shè)計(jì),把原本放在匯編程序上的精力轉(zhuǎn)移到SOC的體系結(jié)構(gòu)和操作系統(tǒng)的底層機(jī)制上。
教師應(yīng)當(dāng)在C、內(nèi)核這幾個(gè)課程階段展開多架構(gòu)匯編語(yǔ)言視角的討論。這樣能夠讓學(xué)生在很長(zhǎng)的時(shí)間跨度上去習(xí)慣用匯編語(yǔ)言的視角分析問題。在本階段的教學(xué)中,首先在Linux環(huán)境下寫匯編,然后才是裸板的匯編。這是因?yàn)榻?jīng)過前期的學(xué)習(xí),學(xué)生對(duì)于Linux和C是比較熟悉的,使用匯編語(yǔ)言和這兩種環(huán)境打交道會(huì)降低學(xué)習(xí)的難度梯度。
消除了學(xué)生對(duì)指令集的恐懼之后,再展開用匯編和C語(yǔ)言直接操作硬件的SOC課程環(huán)節(jié)。他們將通過這個(gè)環(huán)節(jié)了解到基于ARM的SOC體系結(jié)構(gòu)特點(diǎn),包括總線、地址、外設(shè)以及中斷等等硬件知識(shí)。由于已經(jīng)熟悉了匯編語(yǔ)言,所以此時(shí)的學(xué)生能夠把精力集中在SOC體系結(jié)構(gòu)本身上。這是組織課程的一種“超級(jí)技巧”,尤其用來(lái)解決那些復(fù)雜的課程環(huán)節(jié):盡量避免在課程中同時(shí)出現(xiàn)兩個(gè)或多個(gè)學(xué)生之前并不熟悉的知識(shí)體系(在這里就是匯編和SOC芯片)。通過重新規(guī)劃這課程,甚至動(dòng)用其它環(huán)節(jié)的課程以呼應(yīng)這一階段課程的方式降低學(xué)習(xí)的難度梯度。

