嵌入式C語言面試題(附答案)

    時間:2024-06-15 16:04:45 嵌入式培訓(xùn) 我要投稿
    • 相關(guān)推薦

    嵌入式C語言面試題(附答案)

      1 讀程序段,回答問題

    嵌入式C語言面試題(附答案)

      int main(int argc,char *argv[])

      {

      int c=9,d=0;

      c=c++%5;

      d=c;

      printf("d=%d\n",d);

      return 0;

      }

      a) 寫出程序輸出

      b) 在一個可移植的系統(tǒng)中這種表達(dá)式是否存在風(fēng)險?why?

      #include "stdio.h"

      int a=0;

      int b;

      static char c;

      int main(int argc,char *argv[])

      {

      char d=4;

      static short e;

      a++;

      b=100;

      c=(char)++a;

      e=(++d)++;

      printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);

      return 0;

      }

      a) 寫出程序輸出

      b) 編譯器如果安排各個變量(a,b,c,d)在內(nèi)存中的布局(eg. stack,heap,data section,bss section),最好用圖形方式描述。

      2 中斷是嵌入式系統(tǒng)中重要的組成部分,這導(dǎo)致了許多編譯開發(fā)商提供一種擴展:讓標(biāo)準(zhǔn)C支持中斷,產(chǎn)生了一個新的關(guān)鍵字__interrupt。下面的代碼就使用了__interrupt關(guān)鍵字去定義了一個中斷服務(wù)子程序(ISR),請評論以下這段代碼。

      __interrupt double compute_area(double radius)

      {

      double area = PI * radius *radius;

      printf("nArea = %f", area);

      return area;

      }

      3 C/C++基礎(chǔ)知識問題

      a) 關(guān)鍵字volatile在編譯時有什么含義?并給出三個不同使用場景的例子(可以偽代碼或者文字描述)。

      b) C語言中static關(guān)鍵字的具體作用有哪些 ?

      c) 請問下面三種變量聲明有何區(qū)別?請給出具體含義

      int const *p;

      int* const p;

      int const* const p;

      4 嵌入式系統(tǒng)相關(guān)問題

      a) 對于整形變量A=0x12345678,請畫出在little endian及big endian的方式下在內(nèi)存中是如何存儲的。

      b) 在ARM系統(tǒng)中,函數(shù)調(diào)用的時候,參數(shù)是通過哪種方式傳遞的?

      c) 中斷(interrupt,如鍵盤中斷)與異常(exception,如除零異常)有何區(qū)別?

      5 設(shè)周期性任務(wù)P1,P2,P3的周期為T1,T2,T3分別為100,150,400;執(zhí)行時間分別為20,40,100。請設(shè)計一種調(diào)度算法進行任務(wù)調(diào)度,滿足任務(wù)執(zhí)行周期及任務(wù)周期。

      6 優(yōu)先級反轉(zhuǎn)問題在嵌入式系統(tǒng)中是一中嚴(yán)重的問題,必須給與足夠重視。

      a) 首先請解釋優(yōu)先級反轉(zhuǎn)問題

      b) 很多RTOS提供優(yōu)先級繼承策略(Priority inheritance)和優(yōu)先級天花板策略(Priority ceilings)用來解決優(yōu)先級反轉(zhuǎn)問題,請討論這兩種策略。

      參考答案:

      1 5

      存在風(fēng)險,因為c=c++%5;這個表達(dá)式對c有兩次修改,行為未定義,c的值不確定

      int a=0; // data section

      int b; // data section

      static char c; // BSS

      int main(int argc,char *argv[])

      {

      char d=4; // stack

      static short e; // BSS

      a++;

      b=100;

      c=(char)++a;

      e=(++d)++;

      printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);

      return 0;

      }

      a=2,b=100,c=2,d=6,e=5

      2 a)ISR不能返回一個值;

      b)ISR不能傳遞參數(shù);

      c)浮點一般都是不可重入的;

      d)printf函數(shù)有重入和性能上的問題。

      3 a) 用volatile關(guān)鍵字定義變量,相當(dāng)于告訴編譯器,這個變量的值會隨時發(fā)生變化,每次使用時都需要去內(nèi)存里

      重新讀取它的值,并不要隨意針對它作優(yōu)化。

      建議使用volatile變量的場所:

      (1) 并行設(shè)備的硬件寄存器

      (2) 一個中斷服務(wù)子程序中會訪問到的非自動變量(全局變量)

      (3) 多線程應(yīng)用中被幾個任務(wù)共享的變量

      b) 在函數(shù)體,一個被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變。

      在模塊內(nèi)(但在函數(shù)體外),一個被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)

      訪問。它是一個本地的全局變量。

      在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個函數(shù)被限制在聲明它的

      模塊的本地范圍內(nèi)使用。

      static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;

      static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;

      static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝

      c) 一個指向常整型數(shù)的指針

      一個指向整型數(shù)的常指針

      一個指向常整型數(shù)的常指針

      4

      a) 0x12345678

      little endian big endian 剛好反過來

      高地址--〉 0x12 低地址--〉 0x12

      0x34 0x34

      0x56 0x56

      低地址--〉 0x78 高地址--〉 0x78

      b)參數(shù)<=4時候,通過R0~R3傳遞,>4的通過壓棧方式傳遞

      c) 異常:在產(chǎn)生時必須考慮與處理器的時鐘同步,實踐上,異常也稱為同步中斷。在處理器執(zhí)行到由于編程失誤而導(dǎo)致的錯誤指令時,或者在執(zhí)行期間出現(xiàn)特殊情況(如缺頁),必須靠內(nèi)核處理的時候,處理器就會產(chǎn)生一個異常。

      所謂中斷應(yīng)該是指外部硬件產(chǎn)生的一個電信號,從cpu的中斷引腳進入,打斷cpu當(dāng)前的運行;

      所謂異常,是指軟件運行中發(fā)生了一些必須作出處理的事件,cpu自動產(chǎn)生一個陷入來打斷當(dāng)前運行,轉(zhuǎn)入異常處理流程。

      異步與同步的區(qū)別`

      5

      6 高優(yōu)先級任務(wù)需要等待低優(yōu)先級任務(wù)釋放資源,而低優(yōu)先級任務(wù)又正在等待中等優(yōu)先級任務(wù)的現(xiàn)象叫做優(yōu)先級反轉(zhuǎn)

      優(yōu)先級繼承策略(Priority inheritance):繼承現(xiàn)有被阻塞任務(wù)的最高優(yōu)先級作為其優(yōu)先級,任務(wù)退出臨界區(qū),恢

      復(fù)初始優(yōu)先級。

      優(yōu)先級天花板策略(Priority ceilings):控制訪問臨界資源的信號量的優(yōu)先級天花板。

      優(yōu)先級繼承策略對任務(wù)執(zhí)行流程的影響相對教小,因為只有當(dāng)高優(yōu)先級任務(wù)申請已被低優(yōu)先級任務(wù)占有的臨界資源

      這一事實發(fā)生時,才抬升低優(yōu)先級任務(wù)的優(yōu)先

    【嵌入式C語言面試題(附答案)】相關(guān)文章:

    精選C++面試題及答案05-23

    2016年c++經(jīng)典面試題及答案03-19

    2016年嵌入式面試C語言試題「精選」03-07

    2016年嵌入式開發(fā)C語言問題詳解03-11

    2024年嵌入式面試試題(附答案)10-23

    2016年嵌入式工程師面試題及答案「精選」03-07

    計算機C語言試題及答案02-25

    Linux系統(tǒng)工程師面試題(附答案)03-02

    嵌入式開發(fā)中C語言中結(jié)構(gòu)體解讀201603-11

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      亚洲中文字幕姦 | 亚洲日韩中文字幕A∨ | 天天在线高清手机看片 | 亚洲精品国产官网 | 在线欧美日韩国产 | 在线人成亚洲视频免费观看 |