當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式招聘 > 嵌入式面試題 > 嵌入式ARM面試題,找工作必看
學(xué)習(xí)嵌入式,可以說是學(xué)的知識有很多,在找工作的時候,被問到一些面試題,有時候就答不上來,雖然你知道,但是由于你沒有更多的時間,所以就可能讓你與這份工作失之交臂,不管你會不會,懂不懂,面試之前了解和搜集很多相關(guān)的面試題還是很有必要的,下面就是我搜集的一些關(guān)于嵌入式arm方面的面試題,雖然考的不多,但是這些都是經(jīng)典,難免你會碰上呢!
先從小題開始看起:
1.ARM處理器有9種基本尋址方式,分別是:______、______、______、______、______、______、
______、______、______。
答案:寄存器尋址、立即尋址、寄存器偏移尋址、寄存器間接尋址、基址尋址、多寄存器尋址、堆棧尋址、塊拷貝尋址、相對尋址
2.ARM微處理器在較新的體系結(jié)構(gòu)中支持兩種指令集:______、______。
答案:ARM指令集、Thumb指令集
3.匯編語言與C/C++的混合編程通常有以下幾種方式:_____、______、______。
答案:在C/C++代碼中嵌入?yún)R編指令;從匯編程序中訪問C程序變量;匯編程序、C/C++程序間的相互調(diào)用
4.在ARM的匯編程序中,有如下幾種偽指令:_____、______、______、______、______。
答案:符號定義偽指令、數(shù)據(jù)定義偽指令、匯編控制偽指令、宏指令、其他偽指令
5.ARM指令集可以分為6類,分別是:______、______、______、______、______、______。
答案:跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器(PSR)傳輸指令、Load/Store指令、協(xié)處理器指令、異常中斷產(chǎn)生指令
6.ARM C/C++編譯器支持和產(chǎn)生以下幾種格式的文件:_____、____、____、______、______。
答案:filename.c 源文件、filename.h頭文件、filename.o目標(biāo)文件、filename.s匯編代碼文件、filename.lst列表文件
問答題:
題一:
ARM處理器MMU是什么?主要實現(xiàn)什么功能?
題二:
下面的代碼輸出是什么,為什么?
voidfoo(void)
{unsigned int a = 6;
intb = -20;
(a+b> 6) puts("> 6") : puts("<= 6");
}
題三:
盡管不像非嵌入式計算機(jī)那么常見,嵌入式系統(tǒng)還是有從堆(heap)中動態(tài)分配內(nèi)存的過程的。那么嵌入式系統(tǒng)中,動態(tài)分配內(nèi)存可能發(fā)生的問題是什么?
思考過后,再到下方尋找答案
題一答案:
MMU是Memory Management Unit的縮寫,即內(nèi)存管理單元。
MMU主要主要實現(xiàn)功能是:
1、 虛擬存儲空間到物理存儲空間的映射。在ARM中采用了頁式虛擬存儲管理,通過兩級頁表實現(xiàn)虛擬地址到物理地址的映射。
2、 存儲器訪問權(quán)限的控制。
3、 設(shè)置虛擬存儲空間的緩沖的特性,主要包括Cache、write buffer的配置。
題二答案:
這個問題測試你是否懂得C語言中的整數(shù)自動轉(zhuǎn)換原則,我發(fā)現(xiàn)有些開發(fā)者懂得極少這些東西。不管如何,這無符號整型問題的答案是輸出是“>6”。原因是當(dāng)表達(dá)式中存在有符號類型和無符號類型時所有的操作數(shù)都自動轉(zhuǎn)換為無符號類型。因此-20變成了一個非常大的正整數(shù),所以該表達(dá)式計算出的結(jié)果大于6。這一點對于應(yīng)當(dāng)頻繁用到無符號數(shù)據(jù)類型的嵌入式系統(tǒng)來說是豐常重要的。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。
題三答案:
這里,我期望應(yīng)試者能提到內(nèi)存碎片,碎片收集的問題,變量的持行時間等等。這個主題已經(jīng)在ESP雜志中被廣泛地討論過了(主要是P.J.Plauger,他的解釋遠(yuǎn)遠(yuǎn)超過我這里能提到的任何解釋),所有回過頭看一下這些雜志吧!讓應(yīng)試者進(jìn)入一種虛假的安全感覺后,我拿出這么一個小節(jié)目:下面的代碼片段的輸出是什么,為什么?
char*ptr;
if((ptr = (char *)malloc(0)) == NULL)
puts("Gota null pointer");
else
puts("Gota valid pointer");
這是一個有趣的問題。最近在我的一個同事不經(jīng)意把0值傳給了函數(shù)malloc,得到了一個合法的指針之后,我才想到這個問題。這就是上面的代碼,該代碼的輸出是“Gota validpointer”。我用這個來開始討論這樣的一問題,看看被面試者是否想到庫例程這樣做是正確。得到正確的答案固然重要,但解決問題的方法和你做決定的基本原理更重要些。