2016年嵌入式面試試題(附答案)
嵌入式分爲操作系統和硬件兩個方面,就業的方向更廣、更深,就業機會和入職待遇比普通軟件工程師好。下面YJBYS小編爲大家整理了關於嵌入式面試的試題,希望對你有所幫助。
嵌入式系統中,動態分配內存可能發生的問題是什麼
儘管不像非嵌入式計算機那麼常見,嵌入式系統還是有從堆(heap)中動態分配內存的過程的。那麼嵌入式系統中,動態分配內存可能發生的問題是什麼?
這裏,我期望應試者能提到內存碎片,碎片收集的問題,變量的持行時間等等。這個主題已經在ESP雜誌中被廣泛地討論過了(主要是 P.J. Plauger, 他的解釋遠遠超過我這裏能提到的任何解釋),所有回過頭看一下這些雜誌吧!讓應試者進入一種虛假的安全感覺後,我拿出這麼一個小節目:下面的代碼片段的輸出是什麼,爲什麼?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts(“Got a null pointer”);
else
puts(“Got a valid pointer”);
這是一個有趣的問題。最近在我的一個同事不經意把0值傳給了函數malloc,得到了一個合法的指針之後,我纔想到這個問題。這就是上面的代碼,該代碼的'輸出是“Got a valid pointer”。我用這個來開始討論這樣的一問題,看看被面試者是否想到庫例程這樣做是正確。得到正確的答案固然重要,但解決問題的方法和你做決定的基本原理更重要些。
關鍵字volatile有什麼含意並給出三個不同的例子
一個定義爲volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裏的備份。下面是volatile變量的幾個例子:
1). 並行設備的硬件寄存器(如:狀態寄存器)
2). 一箇中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)
3). 多線程應用中被幾個任務共享的變量
嵌入式系統中經常要用到無限循環,你怎麼樣用C編寫死循環呢?
這個問題用幾個解決方案。我首選的方案是:
while(1) { }
一些程序員更喜歡如下方案:
for(;;) { }
這個實現方式讓我爲難,因爲這個語法沒有確切表達到底怎麼回事。如果一個應試者給出這個作爲方案,我將用這個作爲一個機會去探究他們這樣做的基本原理。如果他們的基本答案是:“我被教着這樣做,但從沒有想到過爲什麼。”這會給我留下一個壞印象。
第三個方案是用 goto
Loop:
…
goto Loop;
應試者如給出上面的方案,這說明或者他是一個彙編語言程序員(這也許是好事)或者他是一個想進入新領域的BASIC/FORTRAN程序員。
嵌入式系統中關於中斷的問題
中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴展—讓標準C支持中斷。具代表事實是,產生了一個新的關鍵字 __interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一箇中斷服務子程序(ISR),請評論一下這段代碼的。
__interrupt double compute_area (double radius)
{ double area = PI * radius * radius;
printf(” Area = %f”, area);
return area;
}
這個函數有太多的錯誤了,以至讓人不知從何說起了:
1). ISR 不能返回一個值。如果你不懂這個,那麼你不會被僱用的。
2). ISR 不能傳遞參數。如果你沒有看到這一點,你被僱用的機會等同第一項。
3). 在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額處的寄存器入棧,有些處理器/編譯器就是不允許在ISR中做浮點運算。此外,ISR應該是短而有效率的,在ISR中做浮點運算是不明智的。
4). 與第三點一脈相承,printf()經常有重入和性能上的問題。如果你丟掉了第三和第四點,我不會太爲難你的。不用說,如果你能得到後兩點,那麼你的被僱用前景越來越光明瞭。
相關文章
-
2016年嵌入式軟件工程師面試題(附答案)
嵌入式軟件工程師主要從事嵌入式軟件開發工作。涉及應用層以及底層軟件開發和設計工作。下面YJBYS小編爲大家整理了關於2016嵌入式軟件工程師面試題,希望對你有所幫助。 1、將一個鏈表逆序LinkList *reverse(LinkLi -
2016年嵌入式軟件工程師筆試題(含答案)
yjbys小編爲大家總結了一些嵌入式軟件工程師筆試題及答案,希望對您有所幫助。 選擇題1:設float a=2, b=4, c=3;,以下C語言表達式與代數式 (a+b)+c計算結果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*( -
2017年嵌入式系統開發技術考試練習(附答案)
1. 以下有關進程和程序的說法錯誤的是( D )A.進程是動態的'B.程序是靜態的C.一個程序可以對應多個進程D.程序就是進程2. 微軟開發的嵌入式操作系統是( C )-LinuxaVistaows CErks3. ROM監視器是一個小程序,駐留在嵌入 -
2016年嵌入式面試題及答案
嵌入式面試有什麼最新問題呢?下面跟yjbys小編一起來了解吧!ic變量和static 函數各有什麼特點?static變量分兩種,局部變量和全局變量,他們都放在全局數據區(我覺得表達不準確。全局靜態變量本文件可見,局部靜態變量在在定 -
2016年公司嵌入式面試題及答案
不知道你有沒有注意到,有些人的上眼皮與衆不同,顏色相較於常人,他們的上眼皮顏色比較深,甚至有些發黑發暗,這種現象是由什麼原因造成的呢?又是否和疾病或是其他原因有關?今天我們將和大家簡單討論一下爲什麼有些人的上眼皮會 -
2016年嵌入式c語言面試題及答案
嵌入式C語言是作爲嵌入式Linux開發的基礎語言,也是學習嵌入式的必備語言。常用到的包括數據類型、運算符與表達式、控制語句、數組、指針、函數等內容。本文爲大家分享的是嵌入式C語言面試題題庫及答案解析,希望對大家 -
2016最新嵌入式面試題及答案
隨着年齡的不斷增長,免疫能力逐漸降低,高血壓、糖尿病、心臟病、老年癡呆等都是公認的老年病,而在幾種老年病中高血壓是發病率最高的。高血壓不僅是老年病還是終身病,一旦患病,只能通過藥物和飲食來控制血壓,但不能徹底治癒 -
嵌入式C語言面試題(附答案)
1 讀程序段,回答問題int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf("d=%d\n",d);retu 0;}a) 寫出程序輸出b) 在一個可移植的系統中這種表達式是否存在風險?why?#include "stdio.h"int a=0;int -
2015年計算機三級考試嵌入式系統開發技術模擬試題(含答案)
1. 世界上第一臺計算機研製成功的年代是( C )Α.1944年B.1945年C.1946年D.1947年2. 十進制數235,用二進制表達爲( A )Α.11101011B.11101010C.11101001D.111011103. ARM採用定長指令格式,所有指令都是32位,Bit -
2016年嵌入式工程師面試題及答案「精選」
1 . 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在這想看到幾件事情:1) #define 語法的基本知識(例如:不能以分號結束,括號的使用,等等