嵌入式面試問題(1)——HelloWorld
這裡有一個裝了編譯器和編輯器的計算機。請實現”HelloWorld“程式。在基本版本執行後,增加一個功能,從命令列中獲取名字。最後,告訴我在你的程式碼開始執行之前(main()函式之前)發生了什麼
在很多嵌入式系統中,需要從頭開始開發。在這個任務的第一部分,我希望面試人能夠從一個白板開始,填入基本的功能,即使是在一個不熟悉的開發環境中。我希望他具備解決這個直接明瞭明天的程式設計技能。
這是一個基礎的程式設計問題,因此最好能熟悉簡歷上所述的變成語言。對這個問題來說,任何語言都是一樣的。在我要求實現”HelloWorld“的時候,我考察語言的細節(如包含哪一個標頭檔案,在C和C++中使用命令列引數)。我期望面試者可以基於編譯錯誤去發現和解決語法問題。
這個問題的第二部分是關於嵌入式系統的切入點。純電腦科學家會把計算機看作一個理想的盒子,在其中執行他完美的演算法。在問及在main函式之前發生了什麼的時候,他通常都會說:”你知道的,程式運行了。“但是他沒有理解其中的含義。
但是如果他提到了”start“或者”cstart“,那麼他已經在面試中有一個不錯的開始了。總的來說,我希望他能知道除了我們看到的程式碼之外,程式還需要初始化,而不管是在什麼平臺。我期望能聽到他說設定異常向量來處理中斷、初始化關鍵外設、初始化棧空間、初始化變數,還有如果有C++物件則掉哦那個建構函式。如果他能說清楚編譯器隱式的做了什麼以及初始化程式碼顯式的做了什麼,那就更棒了。
最好的回答就是一步一步描述清楚發生了什麼,並解釋為什麼這些事情會如此的重要,以及他們如何在嵌入式系統中發生。有經驗的嵌入式工程師通常會從向量表開始,從向量表重置到系統加電行為的描述。本書的後面章節將討論這些問題,因此即使這些名詞對大家來說是陌生的也不用擔心。
如果電氣工程師來問這個問題,候選人就可以進一步討論系統加電行為,那麼他會給面試額外的分數。比如,解釋為什麼系統不可能在開關開啟後1毫秒之內啟動並執行。電氣工程師期望聽到加電時序、電壓上升時間、時鐘穩定時間、處理器重置/初始化延時等。