久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式招聘 > 嵌入式面試題 > 嵌入式(shi)工(gong)程師面(mian)試題寶典(dian),過來(lai)人總結

嵌入(ru)式工程師(shi)面試題寶典,過來人總結(jie) 時間:2018-07-31      來源:未知

我現在可(ke)以說(shuo)是(shi)嵌(qian)入式行業的(de)“小學長”了,面試了N多(duo)家公司,我這(zhe)是(shi)屢(lv)敗屢(lv)戰(zhan),屢(lv)戰(zhan)屢(lv)敗,最(zui)(zui)后終于找到一個合適(shi)的(de),當然(ran)在我這(zhe)么多(duo)面試過程中(zhong),也積(ji)累了很多(duo)嵌(qian)入式面試題,都是(shi)公司最(zui)(zui)常見的(de),有些分了類,有些沒有,對(dui)你以后面試找工作還(huan)是(shi)有幫助的(de)。

首(shou)先先上(shang)小題(ti):

1、J2EE中(zhong),當把來自客(ke)戶機(ji)的HTTP請求委托(tuo)給servlet時,會調用(yong)HttpServlet的( )方法

A.service

B.doget

C.dopost

D.init

2、大小為(wei)MAX的(de)(de)循環隊(dui)列中(zhong),f為(wei)當前對頭元(yuan)(yuan)素(su)位(wei)置,r為(wei)當前隊(dui)尾(wei)元(yuan)(yuan)素(su)位(wei)置(后一個(ge)元(yuan)(yuan)素(su)的(de)(de)位(wei)置),則任(ren)意時刻(ke),隊(dui)列中(zhong)的(de)(de)元(yuan)(yuan)素(su)個(ge)數為(wei)

A.r-f

B.r-f+1

C.(r-f+MAX+1)%MAX

D.(r-f+MAX)%MAX

3、在一(yi)個(ge)10階的(de)B-樹上,每個(ge)樹根結點(dian)中所含的(de)關鍵字數目多允許(xu)為(wei)( )個(ge),少允許(xu)為(wei)( )個(ge)。

A.10,5

B.9,4

C.8,3

D.7,6

4、一磁(ci)帶(dai)機有9道(dao)磁(ci)道(dao),帶(dai)長(chang)700m,帶(dai)速(su)2m/s,每個數據(ju)塊1k字(zi)節,塊間間隔14mm。如果數據(ju)傳輸率(lv)為128000字(zi)節/秒,求記錄(lu)位密度為()字(zi)節/m.

A.500000

B.64000

C.1000000

D.12800

5、請將下列構造函(han)數補充完整,使得程序的運行結果是5

#include

using namespace std;

class Sample{

public:

Sample(int x){

________

}

~Sample(){

if(p) delete p;

}

int show(){

return *p;

}

private:

int*p;

};

int main(){

Sample S(5);

cout<

return 0;

}

A.*p=x;

B.p=&x;

C.*p=new int(x);

D.p=new int(x);

6、如下Java語句

double x= 3.0;

int y=5;

x/=--y;

執行后, x的值是()

A.3

B.0.6

C.0.4

D.0.75

7、JAVA反射機制主要(yao)提供了以下(xia)哪些功能?

A.在運行時判斷一(yi)個對(dui)象(xiang)所屬(shu)的類

B.在(zai)運行(xing)時構造一個(ge)類(lei)的對象

C.在運行時判斷一(yi)個類所具有的成員變量和方法

D.在(zai)運行時調用一個對象的方法

參考(kao)答案:1~5:ACBBD 6~7:D ABCD

接下(xia)來就是一些大題了(le):

Static

1. 關(guan)鍵字static的作用(yong)是什(shen)么(me)?

這個簡單的(de)問題(ti)很少有人能回(hui)答(da)完全。在C語(yu)言中,關鍵字static有三個明顯的(de)作用:

1) 在(zai)函(han)數體(ti),一個被聲明為(wei)靜態的變(bian)量在(zai)這一函(han)數被調用(yong)過程中(zhong)維持其值不(bu)變(bian)。

2) 在(zai)模塊(kuai)(kuai)內(nei)(但在(zai)函數(shu)(shu)體外),一(yi)個被(bei)聲明為靜態(tai)的(de)變(bian)量(liang)可(ke)以(yi)被(bei)模塊(kuai)(kuai)內(nei)所用函數(shu)(shu)訪(fang)問(wen),但不能(neng)被(bei)模塊(kuai)(kuai)外其它(ta)函數(shu)(shu)訪(fang)問(wen)。它(ta)是(shi)一(yi)個本地的(de)全(quan)局變(bian)量(liang)。

3) 在(zai)模(mo)塊內,一(yi)個被(bei)(bei)聲明為靜(jing)態(tai)的(de)函數(shu)只可被(bei)(bei)這一(yi)模(mo)塊內的(de)其(qi)它(ta)函數(shu)調用(yong)。那(nei)就是,這個函數(shu)被(bei)(bei)限制在(zai)聲明它(ta)的(de)模(mo)塊的(de)本地(di)范圍內使用(yong)。

大多數應(ying)試(shi)(shi)者能(neng)正(zheng)確(que)回(hui)答(da)第(di)一(yi)部(bu)分(fen)(fen),一(yi)部(bu)分(fen)(fen)能(neng)正(zheng)確(que)回(hui)答(da)第(di)二部(bu)分(fen)(fen),同是很少的(de)(de)人能(neng)懂(dong)得第(di)三部(bu)分(fen)(fen)。這是一(yi)個應(ying)試(shi)(shi)者的(de)(de)嚴重(zhong)的(de)(de)缺點,因為他顯然不懂(dong)得本地化數據和代(dai)碼范圍的(de)(de)好處(chu)和重(zhong)要性。

2 . 用預(yu)處(chu)理指(zhi)令#define 聲明一個常數,用以表明1年中(zhong)有多少秒(忽(hu)略閏年問題)

 #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

我在(zai)這想看到(dao)幾件事情:

1) #define 語法(fa)的基本知識(例如:不能以分號結束,括號的使用,等(deng)等(deng))

2) 懂得預處理(li)器將為你(ni)計算常(chang)數表達(da)式(shi)的值,因此直(zhi)接寫出(chu)你(ni)如何計算一年中有(you)多少秒而(er)不是計算出(chu)實際的值,是更清晰而(er)沒有(you)代價的。

3) 意識到(dao)這(zhe)個(ge)表達式將(jiang)使一個(ge)16位機的整(zheng)型(xing)(xing)數(shu)溢出-因(yin)此要用(yong)到(dao)長(chang)整(zheng)型(xing)(xing)符號L,告訴編譯器這(zhe)個(ge)常數(shu)是(shi)的長(chang)整(zheng)型(xing)(xing)數(shu)。

4) 如果你(ni)在你(ni)的(de)表達式中用到UL(表示無符號長(chang)整型),那么你(ni)有(you)了一個好的(de)起(qi)點(dian)。記(ji)住,第(di)一印象很(hen)重要。

3. 預處理器標識#error的(de)目的(de)是什么(me)?

如(ru)(ru)果你不知道(dao)答(da)案(an),請看參考文(wen)獻1。這(zhe)問題對區分一(yi)個正常(chang)的(de)伙計和一(yi)個書呆子(zi)(zi)(zi)是(shi)很有用(yong)的(de)。只(zhi)有書呆子(zi)(zi)(zi)才會讀C語言課本的(de)附錄去找出象這(zhe)種問題的(de)答(da)案(an)。當然如(ru)(ru)果你不是(shi)在找一(yi)個書呆子(zi)(zi)(zi),那么應試者最好(hao)希望自己不要知道(dao)答(da)案(an)。

死循環(huan)(Infinite loops)

5. 用變(bian)量a給(gei)出下面的定義

a) 一個整型(xing)數(An integer)

b)一個(ge)指(zhi)向整型數(shu)的(de)指(zhi)針( A pointer to an integer)

 c)一(yi)(yi)個(ge)指(zhi)向(xiang)指(zhi)針(zhen)的的指(zhi)針(zhen),它指(zhi)向(xiang)的指(zhi)針(zhen)是指(zhi)向(xiang)一(yi)(yi)個(ge)整型數(shu)( A pointer to a pointer to an intege)r

d)一個有10個整型數的數組( An array of 10 integers)

e) 一(yi)個有10個指(zhi)針的數組,該(gai)指(zhi)針是指(zhi)向一(yi)個整(zheng)型(xing)數的。(An array of 10 pointers to integers)

f) 一個指向有10個整型數數組(zu)的指針(zhen)( A pointer to an array of 10 integers)

g) 一個(ge)指向(xiang)函數的指針,該函數有一個(ge)整(zheng)型參數并(bing)返回一個(ge)整(zheng)型數(A pointer to a function that takes an integer as an argument and returns an integer)

h) 一(yi)個有10個指(zhi)針的數組,該指(zhi)針指(zhi)向一(yi)個函數,該函數有一(yi)個整(zheng)型(xing)參數并返回一(yi)個整(zheng)型(xing)數( An array of ten pointers to functions that take an integer argument and return an integer )

答案是:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

人(ren)們經常聲(sheng)稱這(zhe)(zhe)里有(you)幾個(ge)問(wen)(wen)題(ti)是那種要翻(fan)一下書(shu)才能回答(da)的(de)(de)(de)問(wen)(wen)題(ti),我同意這(zhe)(zhe)種說法。當我寫這(zhe)(zhe)篇文章(zhang)時(shi),為了確定語(yu)法的(de)(de)(de)正(zheng)確性,我的(de)(de)(de)確查了一下書(shu)。但是當我被(bei)面試的(de)(de)(de)時(shi)候(hou),我期(qi)望被(bei)問(wen)(wen)到這(zhe)(zhe)個(ge)問(wen)(wen)題(ti)(或(huo)(huo)者相近的(de)(de)(de)問(wen)(wen)題(ti))。因(yin)為在被(bei)面試的(de)(de)(de)這(zhe)(zhe)段時(shi)間里,我確定我知(zhi)道這(zhe)(zhe)個(ge)問(wen)(wen)題(ti)的(de)(de)(de)答(da)案(an)。應試者如果(guo)不(bu)知(zhi)道所有(you)的(de)(de)(de)答(da)案(an)(或(huo)(huo)至少大部(bu)分答(da)案(an)),那么也就沒有(you)為這(zhe)(zhe)次面試做(zuo)準備,如果(guo)該(gai)面試者沒有(you)為這(zhe)(zhe)次面試做(zuo)準備,那么他又能為什(shen)么出(chu)準備呢?

6. 嵌(qian)入(ru)式系統中經常要用到(dao)無限(xian)循環,你怎么樣用C編(bian)寫死循環呢?

這個問題用幾(ji)個解決(jue)方案(an)。我(wo)首(shou)選的(de)方案(an)是:

while(1){}

一些程(cheng)序員更(geng)喜(xi)歡如下方(fang)案:

for(;;){}

這個(ge)(ge)(ge)實現(xian)方式(shi)讓我為(wei)(wei)難,因(yin)為(wei)(wei)這個(ge)(ge)(ge)語法沒有確切(qie)表(biao)達到底怎么回事。如果(guo)一個(ge)(ge)(ge)應試者給(gei)出這個(ge)(ge)(ge)作為(wei)(wei)方案(an),我將用這個(ge)(ge)(ge)作為(wei)(wei)一個(ge)(ge)(ge)機會(hui)去探(tan)究他們(men)這樣做(zuo)的基本原理。如果(guo)他們(men)的基本答案(an)是:"我被教(jiao)著這樣做(zuo),但從(cong)沒有想到過(guo)為(wei)(wei)什么。"這會(hui)給(gei)我留下一個(ge)(ge)(ge)壞印(yin)象。

第(di)三個(ge)方案(an)是用 goto

Loop:

...

goto Loop;

應試者(zhe)如給(gei)出上面的方(fang)案,這(zhe)說明或者(zhe)他(ta)是一個匯(hui)編語言(yan)程序(xu)員(yuan)(這(zhe)也(ye)許是好(hao)事)或者(zhe)他(ta)是一個想進入新領(ling)域的BASIC/FORTRAN程序(xu)員(yuan)。

數據聲明(Data declarations)

 7. 關(guan)鍵字volatile有什么含意?并給出三(san)個不同的(de)例(li)子。

一個定義為volatile的(de)(de)變(bian)量(liang)(liang)(liang)是說(shuo)這(zhe)變(bian)量(liang)(liang)(liang)可(ke)能會被意想不到(dao)(dao)地改變(bian),這(zhe)樣,編譯器(qi)就(jiu)不會去假設這(zhe)個變(bian)量(liang)(liang)(liang)的(de)(de)值了(le)。精確地說(shuo)就(jiu)是,優(you)化器(qi)在(zai)用到(dao)(dao)這(zhe)個變(bian)量(liang)(liang)(liang)時(shi)必(bi)須每次(ci)都小心地重新讀取這(zhe)個變(bian)量(liang)(liang)(liang)的(de)(de)值,而不是使(shi)用保存(cun)在(zai)寄存(cun)器(qi)里的(de)(de)備份。下面是volatile變(bian)量(liang)(liang)(liang)的(de)(de)幾(ji)個例子:

1) 并行設備的(de)硬件寄存器(qi)(如:狀(zhuang)態寄存器(qi))

2) 一個(ge)中(zhong)斷服務子程(cheng)序中(zhong)會訪問到(dao)的(de)非自動變量(liang)(Non-automatic variables)

3) 多線程應用中被幾個任務共(gong)享的變量(liang)

回答不出(chu)這個問(wen)題的(de)(de)人是不會(hui)被雇傭的(de)(de)。我(wo)認為這是區分(fen)C程序(xu)員和(he)嵌入式系統(tong)程序(xu)員的(de)(de)最基本的(de)(de)問(wen)題。搞嵌入式的(de)(de)家伙們經(jing)常同硬件、中斷(duan)、RTOS等(deng)等(deng)打交道,所有這些都要(yao)求用到volatile變量。不懂(dong)得(de)volatile的(de)(de)內容將會(hui)帶(dai)來災難。

假設被面試者(zhe)正確地回答了這是(shi)問(wen)題(嗯,懷疑是(shi)否會(hui)是(shi)這樣),我將稍微深究一下,看一下這家伙是(shi)不是(shi)直正懂得volatile完(wan)全的重要性。

1) 一個(ge)參數既可(ke)以(yi)是(shi)const還可(ke)以(yi)是(shi)volatile嗎?解釋為什么。

2) 一個(ge)指針可以(yi)是volatile 嗎?解(jie)釋(shi)為什么。

3) 下面的函數有什(shen)么錯誤:

int square(volatile int *ptr){

return *ptr * *ptr;

}

下(xia)面是答(da)案:

1) 是的。一個例子是只(zhi)讀的狀態寄存器(qi)。它是volatile因(yin)為它可能被意想不(bu)到地改(gai)變。它是const因(yin)為程序不(bu)應(ying)該試圖去修改(gai)它。

2) 是的。盡管(guan)這并不很常見。一個(ge)(ge)例(li)子(zi)是當一個(ge)(ge)中服務(wu)子(zi)程(cheng)序修該一個(ge)(ge)指向一個(ge)(ge)buffer的指針時。

3) 這(zhe)段(duan)代(dai)碼(ma)有點變態。這(zhe)段(duan)代(dai)碼(ma)的目(mu)的是(shi)用來返指針*ptr指向值的平方,但是(shi),由于*ptr指向一(yi)個volatile型參數,編譯器將產(chan)生類似(si)下面的代(dai)碼(ma):

int square(volatile int *ptr){

int a,b;

a = *ptr;

b = *ptr;

return a * b;

}

由于*ptr的(de)值(zhi)可(ke)能被意想不到地該變(bian),因此a和b可(ke)能是(shi)不同的(de)。結果(guo),這段代碼可(ke)能返不是(shi)你所期望的(de)平方(fang)值(zhi)!正確的(de)代碼如下:

long square(volatile int *ptr){

int a;

a = *ptr;

return a * a;

}

位操作(Bit manipulation)

Const

8.關鍵字const有什么含意?

我(wo)只要一(yi)(yi)(yi)聽到(dao)被面(mian)試者(zhe)說:"const意(yi)味(wei)著常數",我(wo)就知道(dao)(dao)(dao)我(wo)正在和一(yi)(yi)(yi)個(ge)業余者(zhe)打(da)交道(dao)(dao)(dao)。去年(nian)Dan Saks已經在他的(de)文章(zhang)里完全(quan)概括(kuo)了const的(de)所有用法,因此ESP(譯者(zhe):Embedded Systems Programming)的(de)每一(yi)(yi)(yi)位讀(du)者(zhe)應(ying)該非常熟悉const能(neng)做什么(me)和不能(neng)做什么(me).如果你(ni)從沒有讀(du)到(dao)那篇文章(zhang),只要能(neng)說出(chu)const意(yi)味(wei)著"只讀(du)"就可以了。盡管這(zhe)個(ge)答(da)案(an)不是(shi)完全(quan)的(de)答(da)案(an),但我(wo)接受它作為一(yi)(yi)(yi)個(ge)正確(que)的(de)答(da)案(an)。(如果你(ni)想知道(dao)(dao)(dao)更詳細的(de)答(da)案(an),仔(zi)細讀(du)一(yi)(yi)(yi)下(xia)Saks的(de)文章(zhang)吧(ba)。)

如果(guo)應試者能正確回答這個問題,我將問他一個附加的問題:

下(xia)面的聲(sheng)明都是什么意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

/******/

前兩個(ge)(ge)(ge)的(de)(de)作(zuo)用是(shi)一(yi)(yi)樣,a是(shi)一(yi)(yi)個(ge)(ge)(ge)常整(zheng)型(xing)數(shu)。第三個(ge)(ge)(ge)意味(wei)著(zhu)a是(shi)一(yi)(yi)個(ge)(ge)(ge)指(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)常整(zheng)型(xing)數(shu)的(de)(de)指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)(也(ye)就(jiu)(jiu)是(shi),整(zheng)型(xing)數(shu)是(shi)不(bu)可(ke)(ke)(ke)修(xiu)改(gai)(gai)的(de)(de),但指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)可(ke)(ke)(ke)以)。第四個(ge)(ge)(ge)意思a是(shi)一(yi)(yi)個(ge)(ge)(ge)指(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)整(zheng)型(xing)數(shu)的(de)(de)常指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)(也(ye)就(jiu)(jiu)是(shi)說,指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)指(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)的(de)(de)整(zheng)型(xing)數(shu)是(shi)可(ke)(ke)(ke)以修(xiu)改(gai)(gai)的(de)(de),但指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)是(shi)不(bu)可(ke)(ke)(ke)修(xiu)改(gai)(gai)的(de)(de))。最后(hou)一(yi)(yi)個(ge)(ge)(ge)意味(wei)著(zhu)a是(shi)一(yi)(yi)個(ge)(ge)(ge)指(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)常整(zheng)型(xing)數(shu)的(de)(de)常指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)(也(ye)就(jiu)(jiu)是(shi)說,指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)指(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)的(de)(de)整(zheng)型(xing)數(shu)是(shi)不(bu)可(ke)(ke)(ke)修(xiu)改(gai)(gai)的(de)(de),同時指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)(zhen)(zhen)(zhen)也(ye)是(shi)不(bu)可(ke)(ke)(ke)修(xiu)改(gai)(gai)的(de)(de))。如果(guo)應試者能正確(que)回答這些問(wen)題,那么(me)他就(jiu)(jiu)給我(wo)留下了一(yi)(yi)個(ge)(ge)(ge)好印象。順帶提一(yi)(yi)句(ju),也(ye)許你可(ke)(ke)(ke)能會問(wen),即使不(bu)用關(guan)鍵(jian)(jian)字 const,也(ye)還是(shi)能很容易寫(xie)出(chu)功能正確(que)的(de)(de)程序,那么(me)我(wo)為什么(me)還要(yao)如此看重關(guan)鍵(jian)(jian)字const呢?我(wo)也(ye)如下的(de)(de)幾下理由:

1) 關鍵字const的(de)(de)(de)(de)作用(yong)(yong)(yong)是為(wei)給(gei)讀你代碼的(de)(de)(de)(de)人傳達非常(chang)有用(yong)(yong)(yong)的(de)(de)(de)(de)信(xin)息,實際上,聲明一(yi)個參數(shu)為(wei)常(chang)量是為(wei)了告(gao)訴了用(yong)(yong)(yong)戶這個參數(shu)的(de)(de)(de)(de)應用(yong)(yong)(yong)目的(de)(de)(de)(de)。如(ru)果(guo)你曾花很(hen)(hen)多(duo)時間清理其(qi)它人留下(xia)的(de)(de)(de)(de)垃(la)圾(ji),你就會(hui)很(hen)(hen)快學會(hui)感謝這點(dian)多(duo)余的(de)(de)(de)(de)信(xin)息。(當然(ran),懂得用(yong)(yong)(yong)const的(de)(de)(de)(de)程序員很(hen)(hen)少會(hui)留下(xia)的(de)(de)(de)(de)垃(la)圾(ji)讓別(bie)人來(lai)清理的(de)(de)(de)(de)。)

2) 通過給優(you)化器一些附加的信息,使用關(guan)鍵字const也許能產(chan)生(sheng)更緊湊的代碼(ma)。

3) 合理地使用(yong)關鍵字(zi)const可以使編譯器(qi)很自然地保護那些不希(xi)望被改變的參數(shu),防(fang)止其被無(wu)意的代碼修改。簡而言(yan)之,這樣(yang)可以減少bug的出現。

9. 嵌(qian)入式系統經常(chang)具有要求程序員去(qu)訪問(wen)某特定的(de)內存位置的(de)特點。

在某(mou)工程(cheng)中,要求設置一絕對地址為(wei)(wei)0x67a9的整型(xing)變量的值為(wei)(wei)0xaa66。編譯(yi)器(qi)是(shi)一個純粹的ANSI編譯(yi)器(qi)。寫代(dai)碼去完成這一任務。

這(zhe)(zhe)一(yi)問(wen)題(ti)測試你是否(fou)知道為(wei)了(le)訪(fang)問(wen)一(yi)絕對(dui)地址把一(yi)個整(zheng)型(xing)(xing)數強制轉(zhuan)換(huan)(typecast)為(wei)一(yi)指(zhi)針是合(he)法的。這(zhe)(zhe)一(yi)問(wen)題(ti)的實現方(fang)式隨著(zhu)個人風格(ge)不同(tong)而不同(tong)。典(dian)型(xing)(xing)的類(lei)似代碼如下:

int *ptr;

ptr = (int *)0x67a9;

*ptr = 0xaa55;

A more obscure approach is:

一個(ge)較晦澀的(de)方法是:

*(int * const)(0x67a9) = 0xaa55;

Volatile

10. 嵌(qian)入式系統總是要用戶對變量或寄(ji)存器進行位操作。

給定一個(ge)整型變量(liang)a,寫兩(liang)段代碼,第(di)一個(ge)設置a的(de)bit 3,第(di)二個(ge)清(qing)除a 的(de)bit 3。在以上兩(liang)個(ge)操作中,要保持(chi)其它(ta)位不變。

對這個問(wen)題有三(san)種(zhong)基本的反應

1) 不知道如何下(xia)手(shou)。該被面(mian)者(zhe)從沒做過任何嵌入式系統的工作。

2) 用bit fields。Bit fields是被(bei)扔到C語言死角的(de)(de)東西,它保(bao)證你的(de)(de)代碼在不(bu)(bu)(bu)同編(bian)譯(yi)器之間是不(bu)(bu)(bu)可(ke)移植的(de)(de),同時也保(bao)證了的(de)(de)你的(de)(de)代碼是不(bu)(bu)(bu)可(ke)重用的(de)(de)。我最近不(bu)(bu)(bu)幸看到 Infineon為(wei)其(qi)(qi)較(jiao)復雜的(de)(de)通信芯片寫的(de)(de)驅動程序,它用到了bit fields因(yin)此完全對(dui)我無用,因(yin)為(wei)我的(de)(de)編(bian)譯(yi)器用其(qi)(qi)它的(de)(de)方(fang)式來實現(xian)bit fields的(de)(de)。從道(dao)德講:永遠不(bu)(bu)(bu)要讓一(yi)個非嵌入式的(de)(de)家伙粘實際硬件的(de)(de)邊。

3) 用 #defines 和 bit masks 操作。這是一個有極(ji)高(gao)可移植(zhi)性(xing)的(de)方法,是應該被用到(dao)的(de)方法。最佳(jia)的(de)解決方案如下:

#define BIT3 (0x1 << 3)

static int a;

void set_bit3(void){

a |= BIT3;

}

void clear_bit3(void){

a &= ~BIT3;

}

快(kuai)快(kuai)把這些掌握起來(lai),對(dui)你(ni)以(yi)后的面試還是(shi)相當(dang)有利的,我就是(shi)一個(ge)例子(zi)。

上一篇:cvte2019秋招面試編程題(有嵌入式研發崗)

下一篇:嵌入式ARM面試題,找工作必看

熱點文章推薦
華清學員就業榜(bang)單
高薪(xin)學員(yuan)經驗(yan)分(fen)享
熱點(dian)新聞推薦
前臺(tai)專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部