嵌入式筆試題

  從應用物件上加以定義,嵌入式系統是軟體和硬體的綜合體,還可以涵蓋機械等附屬裝置。國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。下面就由小編為大家介紹一下的文章,歡迎閱讀。

  篇1

  1:用C語言實現大小端的測試

  Int CheckCpu******

  {

  union

  {

  int a;

  char b;

  }c;

  c.a=1;

  if***c.b==1***

  printf***“小端”***;

  else printf***“大端”***;

  }

  2:volatile的作用有哪些?

  Volatile第一變數相當於告訴編譯器這個變數的值會隨時發生變化,每次使用之前都要去記憶體裡從新讀取它的值,並不要隨意針對它做優化,主要用在:

  1:一箇中斷子程式中會訪問到的非自動變數;

  2:多執行緒應用中被幾個執行緒共享的變數;

  3:並行裝置的硬體暫存器。

  3:C語言中static關鍵字的作用有哪些?

  1:在函式體中,一個被宣告為靜態的變數在這個變數在呼叫過程中維持其值不變;

  2:在模組內***但在函式體外***,一個被宣告為靜態的變數,可以被這個模組內的所用函式使用,但不能被模組外的函式使用,它是一個本地的全域性變數;

  3:在模組內,一個被宣告為靜態變數的函式,智慧被這個模組內的函式呼叫;

  4:static全域性變數與區域性變數的區別:static全域性變數只能被初始化一次,防止其他單元檔案中被引用;

  5:static區域性變數與區域性變數的區別:static區域性變數只能被初始化一次,下一次依據上一次結果的值;

  6:static函式與普通函式的區別:static在記憶體中只用一份,普通函式在每一次呼叫中維持一份拷貝。

  4:請問下面三種變數的區別:

  Int const *p : 指向常整型的指標;

  Int *const p; 指向整型的常指標;

  Int *const *p: 指向常整型的常指標;

  5:在ARM系統中,在函式呼叫的時候,引數是通過哪種方式傳遞的。

  當引數小於等於4的時候是通過r0~r3來進行傳遞的,當引數大於4的時候是通過壓棧的方式進行傳遞。

  6:中斷與異常有何區別.

  異常在處理的時候必須考慮與處理器的時鐘同步,實際上異常也稱為同步中斷,在處理器執行到因編譯錯誤而導致的錯誤指令時,或者在執行期間出現特殊錯誤,必須靠核心處理的時候,處理器就會產生一個異常;所謂中斷是指外部硬體產生的一個電訊號從CPU的中斷引腳進入,打斷CPU的執行。所謂異常是指軟體執行過程中發生了一些必須作出處理的事件,CPU自動產生一個陷入來打斷CPU的執行。

  7:用預處理指令#define表示一年中有多少秒

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

  注意後面必須加UL,表示計算的結構是常整型。

  8:簡述SPI,UART,I2C三種傳輸方式。

  SPI:高速同步序列口,首發獨立,可同步進行

  SPI介面主要應用在EEPROM,Flash,實時時鐘,A/D轉化器,數字訊號處理,是一種全雙工同步通訊匯流排,該介面一般使用四條線:序列時鐘線***sck***,主出從入線,主入從出線,低電平有效地的從機選擇線。

  I2C協議:是微控制器與其他晶片進行通訊的協議:1:只要求兩條匯流排線路,一條是序列時鐘線,一條是序列資料線; 2:通過軟體設定地址 3:是一個多主機匯流排,如果兩個或更多主機同時初始化資料傳送可通過沖突檢測和仲裁防止資料破壞; 4:I2C匯流排傳輸的是資料的總高位

  UART:主要是由一個modem***調變解調器***,可以將模擬訊號量轉化成數字訊號量。

  9:中斷不能返回一個值,中斷不能傳遞引數。

  10:嵌入式系統總要求使用者對變數或者暫存器進行位操作,給定一個整型變數a:

  define BIT3 ***oxo1<<3***

  static int a ;

  void set_bit3***void***

  {

  a|=BIT3;

  }

  void clear_bit3***void***

  {

  a&=~BIT3;

  }

  作為一個嵌入式程式設計師,這種程式是小菜一碟,至所以給出這個程式,是想規範大家寫程式方法,這裡主要是用到了一個巨集定義:BIT3 這樣的話就可以增加程式的可讀性

  同時移植性也增強。

  篇2

  1:嵌入式系統中經常要求程式去訪問某特定記憶體的特點,在某工程中,要求設定一個絕對地址0x6799的整型變數的值為0xaa66.

  Int *ptr;

  ptr=***int****0x67a9;

  *ptr=aa66

  2:引用和指標有什麼區別?

  1:應用必須初始化,指標不必;

  2:引用處畫化後不能改變,指標可以被改變;

  3:不存在指向空值的引用,但存在指向空值的指標;

  3:全域性變數與區域性變數在記憶體中是否有區別,是什麼區別?

  全域性變數儲存在靜態資料庫,區域性變數儲存在堆疊;

  4:寫出float,bool,int型別與零的比較,假設變數為X:

  Int : if***x==0***

  Float: if***x>0.0000001&&x<0.0000001***

  Bool: if***x==false***

  5:Intertnet採用哪種網路協議,該協議的主要層次結構?

  TCP/IP協議

  應用層/傳輸層/網路層/數字鏈路層/物理層。

  6:IP地址有兩部分組成:網路號和主機號

  7:程式的區域性變數儲存在***棧***中,全域性變數儲存於***靜態儲存區***,動態申請資料儲存於***堆中***;

  8:編寫一個字串複製函式:strcpy***const char *str,const char *str1***

  void strcpy***const *char str,const chat *str1***

  {

  if****str1==’\0’*** return;

  char *sp1,*sp2;

  sp1= str;

  sp2=str1;

  while****sp2!=’\0’***

  {

  *sp1=sp2;

  sp1++;

  sp2++;

  }

  }

  9:編寫一個函式實現字串翻轉 void rechange***char *str***

  void rechange***char *str***

  {

  Int len;

  char t;

  len=strlen***str***;

  for***int i=0;len/2;i++***

  {

  t=str[i];

  str[i]=str[len-i-1];

  str[len-i-1]=t;

  }

  }

  10:編寫一個函式實現字串比較 int strcmp***char *str1,char *str2***,相等返回1,不相等返回0:

  int strcmp***char *str1,char *str2***

  {

  if****str1==‘\0’||*str2==’\0’*** return;

  while****str1!=’\0’&&*str2!=’\0’&&*str1==*str2***

  {

  str1++;

  str2++;

  }

  if****str1==*str2***

  return 1;

  else return 0;

  }

  }

  篇3

  程序和執行緒的區別:

  1:排程:執行緒作為排程和分配的基本單元,程序作為擁有資源的基本單位;

  2:併發性:不僅程序可以併發執行,同一程序內的執行緒也可以併發執行。

  3:擁有資源:程序是擁有資源的基本獨立單元,執行緒不擁有資源,但可以訪問程序內的資源;

  4:在建立或撤銷執行緒時,由於系統都要為之分配和回收記憶體資源,導致系統的開銷明顯大於建立或撤銷執行緒時的開銷。