2017年嵌入式c語言筆試題及答案
1 讀程序段,回答問題
int main(int argc,char *argv[])
{
int c=9,d=0;
c=c++%5;
d=c;
printf("d=%dn",d);
return 0;
}
a) 寫出程序輸出
b) 在一個可移植的系統中這種表達式是否存在風險?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)在內存中的佈局(eg. stack,heap,data section,bss section),最好用圖形方式描述。
2 中斷是嵌入式系統中重要的組成部分,這導致了許多編譯開發商提供一種擴展:讓標準C支持中斷,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一箇中斷服務子程序(ISR),請評論以下這段代碼。
__interrupt double compute_area(double radius)
{
double area = PI * radius *radius;
printf("nArea = %f", area);
return area;
}
3 C/C++基礎知識問題
a) 關鍵字volatile在編譯時有什麼含義?並給出三個不同使用場景的例子(可以僞代碼或者文字描述)。
b) C語言中static關鍵字的具體作用有哪些 ?
c) 請問下面三種變量聲明有何區別?請給出具體含義
int const *p;
int* const p;
int const* const p;
4 嵌入式系統相關問題
a) 對於整形變量A=0x12345678,請畫出在little endian及big endian的方式下在內存中是如何存儲的。
b) 在ARM系統中,函數調用的時候,參數是通過哪種方式傳遞的?
c) 中斷(interrupt,如鍵盤中斷)與異常(exception,如除零異常)有何區別?
5 設週期性任務P1,P2,P3的週期爲T1,T2,T3分別爲100,150,400;執行時間分別爲20,40,100。請設計一種調度算法進行任務調度,滿足任務執行週期及任務週期。
6 優先級反轉問題在嵌入式系統中是一中嚴重的問題,必須給與足夠重視。
a) 首先請解釋優先級反轉問題
b) 很多RTOS提供優先級繼承策略(Priority inheritance)和優先級天花板策略(Priority ceilings)用來解決優先級反轉問題,請討論這兩種策略。
參考答案:
1 5
存在風險,因爲c=c++%5;這個表達式對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不能傳遞參數;
c)浮點一般都是不可重入的;
d)printf函數有重入和性能上的問題。
3 a) 用volatile關鍵字定義變量,相當於告訴編譯器,這個變量的值會隨時發生變化,每次使用時都需要去內存裏
重新讀取它的值,並不要隨意針對它作優化。
建議使用volatile變量的場所:
(1) 並行設備的'硬件寄存器
(2) 一箇中斷服務子程序中會訪問到的非自動變量(全局變量)
(3) 多線程應用中被幾個任務共享的變量
b) 在函數體,一個被聲明爲靜態的變量在這一函數被調用過程中維持其值不變。
在模塊內(但在函數體外),一個被聲明爲靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數
訪問。它是一個本地的全局變量。
在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的
模塊的本地範圍內使用。
static全局變量與普通的全局變量有什麼區別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什麼區別:static局部變量只被初始化一次,下一次依據上一次結果值;
static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
c) 一個指向常整型數的指針
一個指向整型數的常指針
一個指向常整型數的常指針
4
a) 0x12345678
little endian big endian 剛好反過來
高地址--〉 0x12 低地址--〉 0x12
0x34 0x34
0x56 0x56
低地址--〉 0x78 高地址--〉 0x78
b)參數<=4時候,通過R0~R3傳遞,>4的通過壓棧方式傳遞
c) 異常:在產生時必須考慮與處理器的時鐘同步,實踐上,異常也稱爲同步中斷。在處理器執行到由於編程失誤而導致的錯誤指令時,或者在執行期間出現特殊情況(如缺頁),必須靠內核處理的時候,處理器就會產生一個異常。
所謂中斷應該是指外部硬件產生的一個電信號,從cpu的中斷引腳進入,打斷cpu當前的運行;
所謂異常,是指軟件運行中發生了一些必須作出處理的事件,cpu自動產生一個陷入來打斷當前運行,轉入異常處理流程。
異步與同步的區別`
5
6 高優先級任務需要等待低優先級任務釋放資源,而低優先級任務又正在等待中等優先級任務的現象叫做優先級反轉優先級繼承策略(Priority inheritance):繼承現有被阻塞任務的最高優先級作爲其優先級,任務退出臨界區,恢復初始優先級。
優先級天花板策略(Priority ceilings):控制訪問臨界資源的信號量的優先級天花板。
優先級繼承策略對任務執行流程的影響相對教小,因爲只有當高優先級任務申請已被低優先級任務佔有的臨界資源
這一事實發生時,才擡升低優先級任務的優先級
相關文章
-
嵌入式C語言筆試題及答案
爲幫助同學們深入學習嵌入式C語言學習,yjbys小編爲大家分享最新的嵌入式C語言筆試題及答案,希望對大家有所幫助! 預處理器(Preprocessor)1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)#d -
2016年嵌入式c語言面試題及答案
嵌入式C語言是作爲嵌入式Linux開發的基礎語言,也是學習嵌入式的必備語言。常用到的包括數據類型、運算符與表達式、控制語句、數組、指針、函數等內容。本文爲大家分享的是嵌入式C語言面試題題庫及答案解析,希望對大家 -
2016年嵌入式c語言筆試題
爲幫助同學們更好學習嵌入式C語言,yjbys爲大家分享最新C語言筆試試題及答案,歡迎閱讀!預處理器(Preprocessor)1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)#define SECONDS_PER_YEAR (60 * -
嵌入式面試題及答案「C語言」
嵌入式工程師比較常見的嵌入式面試試題有哪些考點?下面yjbys小編爲大家分享嵌入式工程師面試試題及答案,希望對大家參加面試有所幫助! 預處理器(Preprocessor)1. 用預處理指令#define 聲明一個常數,用以表明1年中有 -
2016年嵌入式軟件C語言筆試題
嵌入式軟件廣泛應用於國防、 工控、家用、商用、辦公、醫療等領域。下文yjbys小編爲大家分享的是嵌入式軟件工程師的考試題及答案,希望對大家有所幫助!預處理器(Preprocessor)1 . 用預處理指令#define 聲明一個常數,用 -
2017嵌入式軟件工程師筆試題及答案
一、選擇題1:設float a=2, b=4, c=3;,以下C語言表達式與代數式 (a+b)+c計算結果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*(a+b)參考答案:B,因爲a,b,c三個變量都是浮點數,所以在B答案中其結果是0,因爲在 -
2016最新嵌入式筆試題及答案
嵌入式系統是軟件和硬件的綜合體,還可以涵蓋機械等附屬裝置。那麼嵌入式考試筆試的試題你做了嗎?下面跟yjbys小編一起來看看吧!1. 以下三條輸出語句分別輸出什麼?char str1[] = "abc";char str2[] = "abc";const char -
嵌入式C語言面試題(附答案)
1 讀程序段,回答問題int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf("d=%d\n",d);retu 0;}a) 寫出程序輸出b) 在一個可移植的系統中這種表達式是否存在風險?why?#include "stdio.h"int a=0;int -
2016年嵌入式面試題及答案
嵌入式面試有什麼最新問題呢?下面跟yjbys小編一起來了解吧!ic變量和static 函數各有什麼特點?static變量分兩種,局部變量和全局變量,他們都放在全局數據區(我覺得表達不準確。全局靜態變量本文件可見,局部靜態變量在在定 -
2017年嵌入式系統開發工程師考試試題及答案
謎面死後才收到稿酬謎語類型打一常言俗語謎底活該,自作自受