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