嵌入式程序員應(yīng)知道的問題講座_第1頁
嵌入式程序員應(yīng)知道的問題講座_第2頁
嵌入式程序員應(yīng)知道的問題講座_第3頁
嵌入式程序員應(yīng)知道的問題講座_第4頁
嵌入式程序員應(yīng)知道的問題講座_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、想成為嵌入式程序員應(yīng)知道的0 x10個(gè)基本問題 HYPERLINK xx3722x/ C語言測(cè)試是招聘嵌入式系統(tǒng)程序員過程中必須而且有效的方法。這些年,我既參加也組織了許多這種測(cè)試,在這過程中我意識(shí)到這些測(cè)試能為面試者和被面試者提供許多有用信息,此外,撇開面試的壓力不談,這種測(cè)試也是相當(dāng)有趣的。 從被面試者的角度來講,你能了解許多關(guān)于出題者或監(jiān)考者的情況。這個(gè)測(cè)試只是出題者為顯示其對(duì)ANSI標(biāo)準(zhǔn)細(xì)節(jié)的知識(shí)而不是技術(shù)技巧而設(shè)計(jì)嗎?這是個(gè)愚蠢的問題嗎?如要你答出某個(gè)字符的ASCII值。這些問題著重考察你的系統(tǒng)調(diào)用和內(nèi)存分配策略方面的能力嗎?這標(biāo)志著出題者也許花時(shí)間在微機(jī)上而不是在嵌入式系統(tǒng)上。如果

2、上述任何問題的答案是是的話,那么我知道我得認(rèn)真考慮我是否應(yīng)該去做這份工作。 從面試者的的角度來來講,一一個(gè)測(cè)試試也許能能從多方方面揭示示應(yīng)試者者的素質(zhì)質(zhì):最基基本的,你你能了解解應(yīng)試者者C語言言的水平平。不管管怎么樣樣,看一一下這人人如何回回答他不不會(huì)的問問題也是是滿有趣趣。應(yīng)試試者是以以好的直直覺做出出明智的的選擇,還還是只是是瞎蒙呢呢?當(dāng)應(yīng)應(yīng)試者在在某個(gè)問問題上卡卡住時(shí)是是找借口口呢,還還是表現(xiàn)現(xiàn)出對(duì)問問題的真真正的好好奇心,把把這看成成學(xué)習(xí)的的機(jī)會(huì)呢呢?我發(fā)發(fā)現(xiàn)這些些信息與與他們的的測(cè)試成成績(jī)一樣樣有用。 有了這些想想法,我我決定出出一些真真正針對(duì)對(duì)嵌入式式系統(tǒng)的的考題,希希望這些些令人

3、頭頭痛的考考題能給給正在找找工作的的人一點(diǎn)點(diǎn)幫助。這這些問題題都是我我這些年年實(shí)際碰碰到的。其其中有些些題很難難,但它它們應(yīng)該該都能給給你一點(diǎn)點(diǎn)啟迪。 這個(gè)測(cè)試適適于不同同水平的的應(yīng)試者者,大多多數(shù)初級(jí)級(jí)水平的的應(yīng)試者者的成績(jī)績(jī)會(huì)很差差,經(jīng)驗(yàn)驗(yàn)豐富的的程序員員應(yīng)該有有很好的的成績(jī)。為為了讓你你能自己己決定某某些問題題的偏好好,每個(gè)個(gè)問題沒沒有分配配分?jǐn)?shù),如如果選擇擇這些考考題為你你所用,請(qǐng)請(qǐng)自行按按你的意意思分配配分?jǐn)?shù)。 預(yù)處理器(PPrepproccesssor) 1 . 用用預(yù)處理理指令#deffinee 聲明明一個(gè)常常數(shù),用用以表明明1年中中有多少少秒(忽忽略閏年年問題) #defiin

4、e SECCONDDS_PPER_YEAAR (60 * 660 * 244 * 3655)ULL 我在這想看看到幾件件事情: 1) #ddefiine 語法的的基本知知識(shí)(例例如:不不能以分分號(hào)結(jié)束束,括號(hào)號(hào)的使用用,等等等) 2)懂得預(yù)預(yù)處理器器將為你你計(jì)算常常數(shù)表達(dá)達(dá)式的值值,因此此,直接接寫出你你是如何何計(jì)算一一年中有有多少秒秒而不是是計(jì)算出出實(shí)際的的值,是是更清晰晰而沒有有代價(jià)的的。 3) 意識(shí)識(shí)到這個(gè)個(gè)表達(dá)式式將使一一個(gè)166位機(jī)的的整型數(shù)數(shù)溢出-因此要要用到長(zhǎng)長(zhǎng)整型符符號(hào)L,告訴編編譯器這這個(gè)常數(shù)數(shù)是的長(zhǎng)長(zhǎng)整型數(shù)數(shù)。 4) 如果果你在你你的表達(dá)達(dá)式中用用到ULL(表示示無符號(hào)號(hào)長(zhǎng)

5、整型型),那那么你有有了一個(gè)個(gè)好的起起點(diǎn)。記記住,第第一印象象很重要要。 2 . 寫寫一個(gè)標(biāo)準(zhǔn)宏MIIN ,這這個(gè)宏輸輸入兩個(gè)個(gè)參數(shù)并并返回較較小的一一個(gè)。 #defiine MINN(A,B) (AA) = (B) ? (A) : (B) 這個(gè)測(cè)試是是為下面面的目的的而設(shè)的的: 1) 標(biāo)識(shí)識(shí)#deefinne在宏宏中應(yīng)用用的基本本知識(shí)。這這是很重重要的。因因?yàn)樵?嵌入(inllinee)操作作符 變變?yōu)闃?biāo)準(zhǔn)準(zhǔn)C的一一部分之之前,宏宏是方便便產(chǎn)生嵌嵌入代碼碼的唯一一方法,對(duì)對(duì)于嵌入入式系統(tǒng)統(tǒng)來說,為為了能達(dá)達(dá)到要求求的性能能,嵌入入代碼經(jīng)經(jīng)常是必必須的方方法。 2)三重條條件操作作符的知知識(shí)。

6、這這個(gè)操作作符存在在C語言言中的原原因是它它使得編編譯器能能產(chǎn)生比比if-theen-eelsee更優(yōu)化化的代碼碼,了解解這個(gè)用用法是很很重要的的。 3) 懂得得在宏中中小心地地把參數(shù)數(shù)用括號(hào)號(hào)括起來來 4) 我也也用這個(gè)個(gè)問題開開始討論論宏的副副作用,例例如:當(dāng)當(dāng)你寫下下面的代代碼時(shí)會(huì)會(huì)發(fā)生什什么事? leastt = MINN(*pp+, b); 3. 預(yù)處處理器標(biāo)標(biāo)識(shí)#eerroor的目目的是什什么? 如果你不知知道答案案,請(qǐng)看看參考文文獻(xiàn)1。這這問題對(duì)對(duì)區(qū)分一一個(gè)正常常的伙計(jì)計(jì)和一個(gè)個(gè)書呆子子是很有有用的。只只有書呆呆子才會(huì)會(huì)讀C語語言課本本的附錄錄去找出出象這種種問題的的答案。當(dāng)當(dāng)然

7、如果果你不是是在找一一個(gè)書呆呆子,那那么應(yīng)試試者最好好希望自自己不要要知道答答案。 死循環(huán)(IInfiinitte lloopps) 4. 嵌入入式系統(tǒng)統(tǒng)中經(jīng)常常要用到到無限循循環(huán),你你怎么樣樣用C編編寫死循循環(huán)呢? 這個(gè)問題用用幾個(gè)解解決方案案。我首首選的方方案是: whilee(1) 一些程序員員更喜歡歡如下方方案: for(;) 這個(gè)實(shí)現(xiàn)方方式讓我我為難,因因?yàn)檫@個(gè)個(gè)語法沒沒有確切切表達(dá)到到底怎么么回事。如如果一個(gè)個(gè)應(yīng)試者者給出這這個(gè)作為為方案,我我將用這這個(gè)作為為一個(gè)機(jī)機(jī)會(huì)去探探究他們們這樣做做的基本本原理。如如果他們們的基本本答案是是:我我被教著著這樣做做,但從從沒有想想到過為為什么

8、。這會(huì)給給我留下下一個(gè)壞壞印象。 第三個(gè)方案案是用 gotto Loop: . goto Looop; 應(yīng)試者如給給出上面面的方案案,這說說明或者者他是一一個(gè)匯編編語言程程序員(這這也許是是好事)或或者他是是一個(gè)想想進(jìn)入新新領(lǐng)域的的BASSIC/FORRTRAAN程序序員。 數(shù)據(jù)聲明(DDataa deeclaarattionns) 5. 用變變量a給給出下面面的定義義 a) 一個(gè)個(gè)整型數(shù)數(shù)(Ann inntegger) b)一個(gè)指指向整型型數(shù)的指指針( A ppoinnterr too ann inntegger) c)一個(gè)指指向指針針的的指指針,它它指向的的指針是是指向一一個(gè)整型型數(shù)( A

9、 ppoinnterr too a poiinteer tto aan iinteege)rr d)一個(gè)有有10個(gè)個(gè)整型數(shù)數(shù)的數(shù)組組( AAn aarraay oof 110 iinteegerrs) e) 一個(gè)個(gè)有100個(gè)指針針的數(shù)組組,該指指針是指指向一個(gè)個(gè)整型數(shù)數(shù)的。(AAn aarraay oof 110 ppoinnterrs tto iinteegerrs) f) 一個(gè)個(gè)指向有有10個(gè)個(gè)整型數(shù)數(shù)數(shù)組的的指針( A ppoinnterr too ann arrrayy off 100 innteggerss) g) 一個(gè)個(gè)指向函函數(shù)的指指針,該該函數(shù)有有一個(gè)整整型參數(shù)數(shù)并返回回一個(gè)整

10、整型數(shù)(AA poointter to a ffuncctioon tthatt taakess ann inntegger as an arggumeent andd reeturrns an inttegeer) h) 一個(gè)個(gè)有100個(gè)指針針的數(shù)組組,該指指針指向向一個(gè)函函數(shù),該該函數(shù)有有一個(gè)整整型參數(shù)數(shù)并返回回一個(gè)整整型數(shù)( An arrray of tenn poointterss too fuuncttionns tthatt taake an inttegeer aarguumennt aand retturnn ann inntegger ) 答案是: a) innt aa; /

11、 AAn iinteegerr b) innt *a; / A ppoinnterr too ann inntegger c) innt *a; / A poiinteer tto aa poointter to an inttegeer d) innt aa100; / An arrray of 10 inttegeers e) innt *a110; / Ann arrrayy off 100 poointterss too innteggerss f) innt (*a)100; / A ppoinnterr too ann arrrayy off 100 innteggerss g)

12、innt (*a)(innt); / A poiinteer tto aa fuuncttionn a thaat ttakees aan iinteegerr arrgummentt annd rretuurnss ann inntegger h) innt (*a10)(iint); / AAn aarraay oof 110 ppoinnterrs tto ffuncctioons thaat ttakee ann inntegger arggumeent andd reeturrn aan iinteegerr 人們經(jīng)常聲聲稱這里里有幾個(gè)個(gè)問題是是那種要要翻一下下書才能能回答的的問題,

13、我我同意這這種說法法。當(dāng)我我寫這篇篇文章時(shí)時(shí),為了了確定語語法的正正確性,我我的確查查了一下下書。但但是當(dāng)我我被面試試的時(shí)候候,我期期望被問問到這個(gè)個(gè)問題(或或者相近近的問題題)。因因?yàn)樵诒槐幻嬖嚨牡倪@段時(shí)時(shí)間里,我我確定我我知道這這個(gè)問題題的答案案。應(yīng)試試者如果果不知道道所有的的答案(或或至少大大部分答答案),那那么也就就沒有為為這次面面試做準(zhǔn)準(zhǔn)備,如如果該面面試者沒沒有為這這次面試試做準(zhǔn)備備,那么么他又能能為什么么出準(zhǔn)備備呢? Statiic 6. 關(guān)鍵鍵字sttatiic的作作用是什什么? 這個(gè)簡(jiǎn)單的的問題很很少有人人能回答答完全。在在C語言言中,關(guān)關(guān)鍵字sstattic有有三個(gè)明明顯的

14、作作用: 1)在函數(shù)數(shù)體,一一個(gè)被聲聲明為靜靜態(tài)的變變量在這這一函數(shù)數(shù)被調(diào)用用過程中中維持其其值不變變。 2) 在模模塊內(nèi)(但但在函數(shù)數(shù)體外),一一個(gè)被聲聲明為靜靜態(tài)的變變量可以以被模塊塊內(nèi)所用用函數(shù)訪訪問,但但不能被被模塊外外其它函函數(shù)訪問問。它是是一個(gè)本本地的全全局變量量。 3) 在模模塊內(nèi),一一個(gè)被聲聲明為靜靜態(tài)的函函數(shù)只可可被這一一模塊內(nèi)內(nèi)的其它它函數(shù)調(diào)調(diào)用。那那就是,這這個(gè)函數(shù)數(shù)被限制制在聲明明它的模模塊的本本地范圍圍內(nèi)使用用。 大多數(shù)應(yīng)試試者能正正確回答答第一部部分,一一部分能能正確回回答第二二部分,同同是很少少的人能能懂得第第三部分分。這是是一個(gè)應(yīng)應(yīng)試者的的嚴(yán)重的的缺點(diǎn),因因?yàn)樗?/p>

15、顯顯然不懂懂得本地地化數(shù)據(jù)據(jù)和代碼碼范圍的的好處和和重要性性。 Constt 7關(guān)鍵字字connst有有什么含含意? 我只要一聽聽到被面面試者說說:cconsst意味味著常數(shù)數(shù),我我就知道道我正在在和一個(gè)個(gè)業(yè)余者者打交道道。去年年Dann Saaks已已經(jīng)在他他的文章章里完全全概括了了connst的的所有用用法,因因此ESSP(譯譯者:EEmbeeddeed SSysttemss Prrogrrammmingg)的每每一位讀讀者應(yīng)該該非常熟熟悉coonstt能做什什么和不不能做什什么.如如果你從從沒有讀讀到那篇篇文章,只只要能說說出coonstt意味著著只讀讀就可可以了。盡盡管這個(gè)個(gè)答案不不是

16、完全全的答案案,但我我接受它它作為一一個(gè)正確確的答案案。(如如果你想想知道更更詳細(xì)的的答案,仔仔細(xì)讀一一下Saaks的的文章吧吧。) 如果應(yīng)試者者能正確確回答這這個(gè)問題題,我將將問他一一個(gè)附加加的問題題: 下面的聲明明都是什什么意思思? constt innt aa; int cconsst aa; constt innt *a; int * coonstt a; int cconsst * a connst; /*/ 前兩個(gè)的作作用是一一樣,aa是一個(gè)個(gè)常整型型數(shù)。第第三個(gè)意意味著aa是一個(gè)個(gè)指向常常整型數(shù)數(shù)的指針針(也就就是,整整型數(shù)是是不可修修改的,但但指針可可以)。第第四個(gè)意意思a是是

17、一個(gè)指指向整型型數(shù)的常常指針(也也就是說說,指針針指向的的整型數(shù)數(shù)是可以以修改的的,但指指針是不不可修改改的)。最最后一個(gè)個(gè)意味著著a是一一個(gè)指向向常整型型數(shù)的常常指針(也也就是說說,指針針指向的的整型數(shù)數(shù)是不可可修改的的,同時(shí)時(shí)指針也也是不可可修改的的)。如如果應(yīng)試試者能正正確回答答這些問問題,那那么他就就給我留留下了一一個(gè)好印印象。順順帶提一一句,也也許你可可能會(huì)問問,即使使不用關(guān)關(guān)鍵字 connst,也也還是能能很容易易寫出功功能正確確的程序序,那么么我為什什么還要要如此看看重關(guān)鍵鍵字coonstt呢?我我也如下下的幾下下理由: 1) 關(guān)鍵鍵字coonstt的作用用是為給給讀你代代碼的人

18、人傳達(dá)非非常有用用的信息息,實(shí)際際上,聲聲明一個(gè)個(gè)參數(shù)為為常量是是為了告告訴了用用戶這個(gè)個(gè)參數(shù)的的應(yīng)用目目的。如如果你曾曾花很多多時(shí)間清清理其它它人留下下的垃圾圾,你就就會(huì)很快快學(xué)會(huì)感感謝這點(diǎn)點(diǎn)多余的的信息。(當(dāng)當(dāng)然,懂懂得用cconsst的程程序員很很少會(huì)留留下的垃垃圾讓別別人來清清理的。) 2) 通過過給優(yōu)化化器一些些附加的的信息,使使用關(guān)鍵鍵字coonstt也許能能產(chǎn)生更更緊湊的的代碼。 3) 合理理地使用用關(guān)鍵字字connst可可以使編編譯器很很自然地地保護(hù)那那些不希希望被改改變的參參數(shù),防防止其被被無意的的代碼修修改。簡(jiǎn)簡(jiǎn)而言之之,這樣樣可以減減少buug的出出現(xiàn)。 Volattil

19、ee 8. 關(guān)鍵鍵字voolattilee有什么么含意?并給出出三個(gè)不不同的例例子。 一個(gè)定義為為vollatiile的的變量是是說這變變量可能能會(huì)被意意想不到到地改變變,這樣樣,編譯譯器就不不會(huì)去假假設(shè)這個(gè)個(gè)變量的的值了。精精確地說說就是,優(yōu)優(yōu)化器在在用到這這個(gè)變量量時(shí)必須須每次都都小心地地重新讀讀取這個(gè)個(gè)變量的的值,而而不是使使用保存存在寄存存器里的的備份。下下面是vvolaatille變量量的幾個(gè)個(gè)例子: 1) 并行行設(shè)備的的硬件寄寄存器(如如:狀態(tài)態(tài)寄存器器) 2) 一個(gè)個(gè)中斷服服務(wù)子程程序中會(huì)會(huì)訪問到到的非自自動(dòng)變量量(Noon-aautoomattic varriabbless)

20、3) 多線線程應(yīng)用用中被幾幾個(gè)任務(wù)務(wù)共享的的變量 回答不出這這個(gè)問題題的人是是不會(huì)被被雇傭的的。我認(rèn)認(rèn)為這是是區(qū)分CC程序員員和嵌入入式系統(tǒng)統(tǒng)程序員員的最基基本的問問題。搞搞嵌入式式的家伙伙們經(jīng)常常同硬件件、中斷斷、RTTOS等等等打交交道,所所有這些些都要求求用到vvolaatille變量量。不懂懂得voolattilee的內(nèi)容容將會(huì)帶帶來災(zāi)難難。 假設(shè)被面試試者正確確地回答答了這是是問題(嗯嗯,懷疑疑是否會(huì)會(huì)是這樣樣),我我將稍微微深究一一下,看看一下這這家伙是是不是直直正懂得得vollatiile完完全的重重要性。 1)一個(gè)參參數(shù)既可可以是cconsst還可可以是vvolaatille嗎

21、?解釋為為什么。 2); 一一個(gè)指針針可以是是vollatiile 嗎?解解釋為什什么。 3); 下下面的函函數(shù)有什什么錯(cuò)誤誤: int ssquaare(vollatiile intt *pptr) returrn *ptrr * *pttr; 下面是答案案: 1)是的。一一個(gè)例子子是只讀讀的狀態(tài)態(tài)寄存器器。它是是vollatiile因因?yàn)樗煽赡鼙灰庖庀氩坏降降馗淖冏?。它是是connst因因?yàn)槌绦蛐虿粦?yīng)該該試圖去去修改它它。 2); 是是的。盡盡管這并并不很常常見。一一個(gè)例子子是當(dāng)一一個(gè)中服服務(wù)子程程序修該該一個(gè)指指向一個(gè)個(gè)buffferr的指針針時(shí)。 3) 這段段代碼有有點(diǎn)變態(tài)態(tài)。這段段

22、代碼的的目的是是用來返返指針*ptrr指向值值的平方方,但是是,由于于*pttr指向向一個(gè)vvolaatille型參參數(shù),編編譯器將將產(chǎn)生類類似下面面的代碼碼: int ssquaare(vollatiile intt *pptr) int aa,b; a = *ptrr; b = *ptrr; returrn aa * b; 由于*pttr的值值可能被被意想不不到地該該變,因因此a和和b可能能是不同同的。結(jié)結(jié)果,這這段代碼碼可能返返不是你你所期望望的平方方值!正正確的代代碼如下下: long squuaree(voolattilee innt *ptrr) int aa; a = *ptrr

23、; returrn aa * a; 位操作(BBit mannipuulattionn) 9. 嵌入入式系統(tǒng)統(tǒng)總是要要用戶對(duì)對(duì)變量或或寄存器器進(jìn)行位位操作。給給定一個(gè)個(gè)整型變變量a,寫寫兩段代代碼,第第一個(gè)設(shè)設(shè)置a的的bitt 3,第第二個(gè)清清除a 的biit 33。在以以上兩個(gè)個(gè)操作中中,要保保持其它它位不變變。 對(duì)這個(gè)問題題有三種種基本的的反應(yīng) 1)不知道道如何下下手。該該被面者者從沒做做過任何何嵌入式式系統(tǒng)的的工作。 2) 用bbit fieeldss。Biit ffiellds是是被扔到到C語言言死角的的東西,它它保證你你的代碼碼在不同同編譯器器之間是是不可移移植的,同同時(shí)也保保證了的

24、的你的代代碼是不不可重用用的。我我最近不不幸看到到 Innfinneonn為其較較復(fù)雜的的通信芯芯片寫的的驅(qū)動(dòng)程程序,它它用到了了bitt fiieldds因此此完全對(duì)對(duì)我無用用,因?yàn)闉槲业木幘幾g器用用其它的的方式來來實(shí)現(xiàn)bbit fieeldss的。從從道德講講:永遠(yuǎn)遠(yuǎn)不要讓讓一個(gè)非非嵌入式式的家伙伙粘實(shí)際際硬件的的邊。 3) 用 #deefinnes 和 bbit massks 操作。這這是一個(gè)個(gè)有極高高可移植植性的方方法,是是應(yīng)該被被用到的的方法。最最佳的解解決方案案如下: #defiine BITT3 (0 x11 66) ? puuts( 6) : putts(66。原原因是當(dāng)當(dāng)表達(dá)

25、式式中存在在有符號(hào)號(hào)類型和和無符號(hào)號(hào)類型時(shí)時(shí)所有的的操作數(shù)數(shù)都自動(dòng)動(dòng)轉(zhuǎn)換為為無符號(hào)號(hào)類型。因因此-220變成成了一個(gè)個(gè)非常大大的正整整數(shù),所所以該表表達(dá)式計(jì)計(jì)算出的的結(jié)果大大于6。這這一點(diǎn)對(duì)對(duì)于應(yīng)當(dāng)當(dāng)頻繁用用到無符符號(hào)數(shù)據(jù)據(jù)類型的的嵌入式式系統(tǒng)來來說是豐豐常重要要的。如如果你答答錯(cuò)了這這個(gè)問題題,你也也就到了了得不到到這份工工作的邊邊緣。 一三. 評(píng)評(píng)價(jià)下面面的代碼碼片斷: unsiggnedd innt zzeroo = 0; unsiggnedd innt ccomppzerro = 0 xxFFFFF; /*1ss coompllemeent of zerro */ 對(duì)于一個(gè)iint型型

26、不是116位的的處理器器為說,上上面的代代碼是不不正確的的。應(yīng)編編寫如下下: unsiggnedd innt ccomppzerro = 00; 這一問題真真正能揭揭露出應(yīng)應(yīng)試者是是否懂得得處理器器字長(zhǎng)的的重要性性。在我我的經(jīng)驗(yàn)驗(yàn)里,好好的嵌入入式程序序員非常常準(zhǔn)確地地明白硬硬件的細(xì)細(xì)節(jié)和它它的局限限,然而而PC機(jī)機(jī)程序往往往把硬硬件作為為一個(gè)無無法避免免的煩惱惱。 到了這個(gè)階階段,應(yīng)應(yīng)試者或或者完全全垂頭喪喪氣了或或者信心心滿滿志志在必得得。如果果顯然應(yīng)應(yīng)試者不不是很好好,那么么這個(gè)測(cè)測(cè)試就在在這里結(jié)結(jié)束了。但但如果顯顯然應(yīng)試試者做得得不錯(cuò),那那么我就就扔出下下面的追追加問題題,這些些問題是

27、是比較難難的,我我想僅僅僅非常優(yōu)優(yōu)秀的應(yīng)應(yīng)試者能能做得不不錯(cuò)。提提出這些些問題,我我希望更更多看到到應(yīng)試者者應(yīng)付問問題的方方法,而而不是答答案。不不管如何何,你就就當(dāng)是這這個(gè)娛樂樂吧. 動(dòng)態(tài)內(nèi)存分分配(DDynaamicc meemorry aalloocattionn) 14. 盡盡管不像像非嵌入入式計(jì)算算機(jī)那么么常見,嵌嵌入式系系統(tǒng)還是是有從堆堆(heeap)中中動(dòng)態(tài)分分配內(nèi)存存的過程程的。那那么嵌入入式系統(tǒng)統(tǒng)中,動(dòng)動(dòng)態(tài)分配配內(nèi)存可可能發(fā)生生的問題題是什么么? 這里,我期期望應(yīng)試試者能提提到內(nèi)存存碎片,碎碎片收集集的問題題,變量量的持行行時(shí)間等等等。這這個(gè)主題題已經(jīng)在在ESPP雜志中中被廣

28、泛泛地討論論過了(主主要是 P.JJ. PPlauugerr, 他他的解釋釋遠(yuǎn)遠(yuǎn)超超過我這這里能提提到的任任何解釋釋),所所有回過過頭看一一下這些些雜志吧吧!讓應(yīng)應(yīng)試者進(jìn)進(jìn)入一種種虛假的的安全感感覺后,我我拿出這這么一個(gè)個(gè)小節(jié)目目: 下面的代碼碼片段的的輸出是是什么,為為什么? char *pttr; if (ptrr = (chhar *)mmallloc(0) = NUULL) puts(Goot aa nuull poiinteer); else puts(Goot aa vaalidd poointter); 這是一個(gè)有有趣的問問題。最最近在我我的一個(gè)個(gè)同事不不經(jīng)意把把0值傳傳給了函函

29、數(shù)maallooc,得得到了一一個(gè)合法法的指針針之后,我我才想到到這個(gè)問問題。這這就是上上面的代代碼,該該代碼的的輸出是是Goot aa vaalidd poointter。我用用這個(gè)來來開始討討論這樣樣的一問問題,看看看被面面試者是是否想到到庫例程程這樣做做是正確確。得到到正確的的答案固固然重要要,但解解決問題題的方法法和你做做決定的的基本原原理更重重要些。 Typeddef 一五 Tyypeddef 在C語語言中頻頻繁用以以聲明一一個(gè)已經(jīng)經(jīng)存在的的數(shù)據(jù)類類型的同同義字。也也可以用用預(yù)處理理器做類類似的事事。例如如,思考考一下下下面的例例子: #defiine dPSS sttrucct ss * typeddef strructt s * ttPS; 以上兩種情情況的意意圖都是是要定義義d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論