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