嵌入式面試題2

來源:互聯網
上載者:User
1.用指令#define 聲明一個常數,用於表明1年中用多少秒(忽略閏年問題)答:#define SECOND_PER_YEAR  (60*60*24*365)UL2.寫一個標準的宏MIN,這個宏輸入兩個參數,並返回較小的一個答:#define MIN(a,b) ((a) > (b) ? (a) : (b))3.嵌入式系統中經常用到的無限迴圈,用C寫死迴圈while(1){}4.資料聲明,用變數a給出下面的定義1)一個整型數int a;2)一個指向整型數的指標int *a;3)一個指向指標的指標,它指向的指標是指向一個整形數int **a;4)一個有10個整形數的數組int a[10];5)一個有10個指標的數組,該指標是指向一個整形數的int *a[10];6)一個指向有10個整形數組的指標int (*a)[10];7)一個指向函數的指標,該函數有一個整形參數並返回一個整形數int (*a)(int);8)一個有10個指標的數組,該指標指向一個函數,該函數有一個整形參數並返回一個整形數int (*a[10])(int);5.關鍵字static的作用答:1)在函數體,一個被聲明為靜態變數在這一函數被調用的過程中維持其值不變int fun(){static int a = 5;//在5的基礎上累加a ++;return a;}2)在模組內(但在函數體外)一個被聲明為靜態變數可以被模組內所有函數訪問但不能被模組外的其它函數訪問。3)在模組內,一個被聲明為靜態函數只可被這一模組內的其它函數調用6.關鍵字const有什麼含意 答:const可以保護不希望被改變的變數參數const int a;a是一個常整形(把類型去掉,保護最近的那個)const int *a;(*a不可修改,a可以修改)a是一個指向常整形的指標int *const a; (a不可修改,*a可以修改) a是一個指向整形的常指標int const *a const;(*a和a都不可以修改)a是一個指向常整形的常指標7.關鍵字volatile有什麼含意,並給出三個不同的例子答:防止變數被最佳化,最佳化器在處理被volatile修飾的變數時,會重新讀取這個變數的值,而不是使用儲存在寄存器裡的備份(可能被意想不到的改變)1)平行裝置的硬體寄存器(狀態寄存器)2)一個中斷服務子程式中會訪問到的非自動變數3)多線程應用中被幾個任務共用的變數8.一個參數可以是const還可以是volatile嗎答:可以,唯讀狀態寄存器,它是volatile因為它可能被意想不到地改變,它是const因為程式不應該試圖去修改它9. int square(volatile int *ptr){return *ptr * *ptr;}函數有什麼錯誤答:*ptr的值可能被意想不到的改變,傳回值不是期望的平方值改:long square(volatile int *ptr){int a;a = *ptr;return a * a;}10. 位操作給定一個整形變數a,寫兩片代碼,第一個設定a的bit 3,第二個清除a的 bit 3在以上兩個操作中,要保持其它位不變答:#define BIT3 (0x1 << 3)static int a;void set_bit3(void){ a | = BIT3;}void clear_bit3(void){a &= ~BIT3;}11.訪問固定的記憶體位置嵌入式系統經常要求程式員去訪問特定的記憶體位置的點,要求設定一絕對位址為0x6780的整型變數的值為0x5566答: int *p;p = (int *)0x6780;*p = 0x5566;(訪問絕對位址把一個整型,強制轉換成一個指標是合法的)12.中斷服務程式ISR(請評論)__interrupt double compute_area(doble radius){double area = PI*radius*radius;printf("\n AREA = %f", area);return area;}答:1)ISR不能傳回值2)ISR不能傳遞參數3)有些編譯器不允許在ISR中做浮點運算4)printf有重入性問題13. 下面代碼輸出什嗎?為什嗎?void foo(void){unsigned int a = 6;int b = -20;(a+b > 6) ? puts("> 6") : puts("<=6");}答:輸出>6,因為運算式中有符號和無符號類型時,所有運算元都自動轉換為無符號型14.評價下面的代碼unsigned int zero = 0;unsigned int compzero = 0xFFFF;答:對一個int 型不是16位的處理器不正確unsigned int compzero = ~0;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.