|
題一:
ARM處理器MMU是什么?主要實(shí)現(xiàn)什么功能?
思考過(guò)后,再到下方尋找答案
題二:
下面的代碼輸出是什么,為什么?
voidfoo(void)
{unsigned int a = 6;
intb = -20;
(a+b> 6) puts("> 6") : puts("<= 6");
}
題三:
盡管不像非嵌入式計(jì)算機(jī)那么常見(jiàn),嵌入式系統(tǒng)還是有從堆(heap)中動(dòng)態(tài)分配內(nèi)存的過(guò)程的。那么嵌入式系統(tǒng)中,動(dòng)態(tài)分配內(nèi)存可能發(fā)生的問(wèn)題是什么?
思考過(guò)后,再到下方尋找答案
題一答案:
MMU是Memory Management Unit的縮寫(xiě),即內(nèi)存管理單元。
MMU主要主要實(shí)現(xiàn)功能是:
1、 虛擬存儲(chǔ)空間到物理存儲(chǔ)空間的映射。在ARM中采用了頁(yè)式虛擬存儲(chǔ)管理,通過(guò)兩級(jí)頁(yè)表實(shí)現(xiàn)虛擬地址到物理地址的映射。
2、 存儲(chǔ)器訪問(wèn)權(quán)限的控制。
3、 設(shè)置虛擬存儲(chǔ)空間的緩沖的特性,主要包括Cache、write buffer的配置。
題二答案:
這個(gè)問(wèn)題測(cè)試你是否懂得C語(yǔ)言中的整數(shù)自動(dòng)轉(zhuǎn)換原則,我發(fā)現(xiàn)有些開(kāi)發(fā)者懂得極少這些東西。不管如何,這無(wú)符號(hào)整型問(wèn)題的答案是輸出是“>6”。原因是當(dāng)表達(dá)式中存在有符號(hào)類型和無(wú)符號(hào)類型時(shí)所有的操作數(shù)都自動(dòng)轉(zhuǎn)換為無(wú)符號(hào)類型。因此-20變成了一個(gè)非常大的正整數(shù),所以該表達(dá)式計(jì)算出的結(jié)果大于6。這一點(diǎn)對(duì)于應(yīng)當(dāng)頻繁用到無(wú)符號(hào)數(shù)據(jù)類型的嵌入式系統(tǒng)來(lái)說(shuō)是豐常重要的。如果你答錯(cuò)了這個(gè)問(wèn)題,你也就到了得不到這份工作的邊緣。
題三答案:
這里,我期望應(yīng)試者能提到內(nèi)存碎片,碎片收集的問(wèn)題,變量的持行時(shí)間等等。這個(gè)主題已經(jīng)在ESP雜志中被廣泛地討論過(guò)了(主要是P.J.Plauger,他的解釋遠(yuǎn)遠(yuǎn)超過(guò)我這里能提到的任何解釋),所有回過(guò)頭看一下這些雜志吧!讓?xiě)?yīng)試者進(jìn)入一種虛假的安全感覺(jué)后,我拿出這么一個(gè)小節(jié)目:下面的代碼片段的輸出是什么,為什么?
char*ptr;
if((ptr = (char *)malloc(0)) == NULL)
puts("Gota null pointer");
else
puts("Gota valid pointer");
這是一個(gè)有趣的問(wèn)題。最近在我的一個(gè)同事不經(jīng)意把0值傳給了函數(shù)malloc,得到了一個(gè)合法的指針之后,我才想到這個(gè)問(wèn)題。這就是上面的代碼,該代碼的輸出是“Gota validpointer”。我用這個(gè)來(lái)開(kāi)始討論這樣的一問(wèn)題,看看被面試者是否想到庫(kù)例程這樣做是正確。得到正確的答案固然重要,但解決問(wèn)題的方法和你做決定的基本原理更重要些。
以下課程可免費(fèi)試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。
宋工企鵝號(hào):3524-6590-88 Tel/WX:173--1795--1908
|
|