天天看點

《 嵌入式系統設計與實踐》一一1.3 延伸閱讀

1.3 延伸閱讀

有很多關于設計模式的優秀參考書。以下兩本是我最喜歡的。

gamma, erich; richard helm, ralph johnson, and john vlissides(1995),設計模式:可複用面向對象軟體的基礎。boston: addison-wesley。有很多關于設計模式的參考資料,但這本書是革命性的著作。由于這四個作者,這本書常稱為“四人幫”(gof)書(标準的設計模式可以稱做gof模式)。

freeman, eric t., elisabeth robson, bert bates, kathy sierra (2004). 《head first design patterns》. cambridge, ma: o'reilly media.

面試問題:hello world

這裡有一個裝了編譯器和編輯器的計算機。請實作“hello world”程式。在基本版本運作後,增加一個功能,從指令行中擷取名字。最後,告訴我在你的代碼開始執行之前(main()函數之前)發生了什麼(感謝phillip king提供了這個問題)。

在很多嵌入式系統中,需要從頭開始開發。在這個任務的第一部分,我希望面試人能夠從一個白闆開始,填入基本的功能,即使是在一個不熟悉的開發環境中。我希望他具備解決這個直接明了問題的程式設計技能。

這是一個基礎的程式設計問題,是以最好能熟悉履歷上所述的程式設計語言。對這個問題來說,任何語言都是一樣的。在我要求實作“hello world”時,我考察語言的細節(如包含哪個頭檔案,在c和c++中使用指令行參數)。我期望面試者能基于編譯錯誤去發現和解決文法問題(然而,當他能輸入整個程式而沒有任何錯誤,即使是拼寫錯誤也沒有時,也會給我留下極其深刻的印象)。

注意:我自己是個不錯的打字員,但如果有人在旁邊看着我,我會每隔一個字母就輸錯。沒有問題,很多人都會這樣。是以,不要因為這而亂了方寸。專注在鍵盤和代碼上,而不是在你的打字技巧上。

這個問題的第二部分是關于嵌入式系統的切入點。純計算機科學家會把計算機看做一個理想的盒子,在其中執行他的完美算法。當問及在main函數之前發生了什麼時,他通常會說:“你知道的,程式運作了。”但他并沒有了解其中的含義。

但是,如果他提到“start”或者“cstart”,那麼他已經在面試中有個不錯的開始了。總的說來,我希望他能知道除了我們看到的代碼之外,程式還需要初始化,而不管是在什麼平台。我期望能聽到他說設定異常向量來進行中斷、初始化關鍵外設、初始化棧空間、初始化變量,還有如果有c++對象則調用構造函數。如果他能說清楚編譯器隐式地做了什麼以及初始化代碼顯式地做了什麼,那就更棒了。

最好的回答就是一步一步描述清楚發生了什麼,并且解釋為什麼這些事情如此重要以及它們如何在嵌入式系統中發生。有經驗的嵌入式工程師通常會從向量表開始,從向量表重置到系統加電行為的描述。本書的後面章節将讨論這些問題,是以即使這些名詞對大家來說是陌生的也不用擔心。

如果電氣工程師(ee)來問這個問題,候選人就可以進一步讨論系統加電行為,那麼他會給面試額外的分數。比如,解釋為什麼系統不可能在開關打開後1毫秒之内啟動并運作。電氣工程師期望聽到加電時序、電壓上升時間、時鐘穩定時間、處理器重置/初始化延時等。

繼續閱讀