亚洲高清vr播放在线观看,欧美亚洲精品免费,欧美日韩天堂在线视频,午夜福利小视频

      學習啦 > 創(chuàng)業(yè)指南 > 職場 > 面試題 > 嵌入式軟件工程師面試題:中斷

      嵌入式軟件工程師面試題:中斷

      時間: 敏敏644 分享

      嵌入式軟件工程師面試題:中斷

        中斷(Interrupts)

        1、 中斷是嵌入式系統(tǒng)中重要的組成部分,這導致了很多編譯開發(fā)商提供一種擴展—讓標準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()經常有重入和性能上的問題。如果你丟掉了第三和第四點,我不會太為難你的。不用說,如果你能得到后兩點,那么你的被雇用前景越來越光明了。

        代碼例子(Code examples)

        2、下面的代碼輸出是什么,為什么?

        Void foo(void)

        {

        unsigned int a = 6;

        int b = -20;

        (a+b > 6) puts("> 6") : puts("<= 6");

        }

        這個問題測試你是否懂得C語言中的整數自動轉換原則,我發(fā)現(xiàn)有些開發(fā)者懂得極少這些東西。不管如何,這無符號整型問題的答案是輸出是“>6”。原因是當表達式中存在有符號類型和無符號類型時所有的操作數都自動轉換為無符號類型。 因此-20變成了一個非常大的正整數,所以該表達式計算出的結果大于6。這一點對于應當頻繁用到無符號數據類型的嵌入式系統(tǒng)來說是豐常重要的。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。

        3、 評價下面的代碼片斷:

        unsigned int zero = 0;

        unsigned int compzero = 0xFFFF;

        /*1's complement of zero */

        對于一個int型不是16位的處理器為說,上面的代碼是不正確的。應編寫如下:

        unsigned int compzero = ~0;

        這一問題真正能揭露出應試者是否懂得處理器字長的重要性。在我的經驗里,好的嵌入式程序員非常準確地明白硬件的細節(jié)和它的局限,然而PC機程序往往把硬件作為一個無法避免的煩惱。

        到了這個階段,應試者或者完全垂頭喪氣了或者信心滿滿志在必得。如果顯然應試者不是很好,那么這個測試就在這里結束了。但如果顯然應試者做得不錯,那么我就扔出下面的追加問題,這些問題是比較難的,我想僅僅非常優(yōu)秀的應試者能做得不錯。提出這些問題,我希望更多看到應試者應付問題的方法,而不是答案。不管如何,你就當是這個娛樂吧…

      204019