int main(int argc,char *argv[])
{
int c=9,d = 0;
c = c++ % 5;
d = c;
printf("d=%d\n ",d);
返回0;
}
a)寫出程序輸出
b)這種表達在便攜系統中有風險嗎?為什麽?
#包含“stdio.h”
int a = 0;
int b;
靜態電荷c;
int main(int argc,char *argv[])
{
char d = 4;
靜態短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);
返回0;
}
a)寫出程序輸出
b)如果編譯器在內存中安排每個變量(a,b,c,d)的布局(如棧,堆,數據段,BSS段),最好用圖形描述。
2中斷是嵌入式系統的重要組成部分,這導致很多編譯器開發者提供了壹個擴展:標準C支持中斷,由此產生了壹個新的關鍵字__interrupt。以下代碼使用__interrupt關鍵字來定義中斷服務子例程(ISR)。請對以下代碼進行評論。
_ _中斷double compute_area(雙半徑)
{
雙面積= PI *半徑*半徑;
printf("nArea = %f ",area);
返回區域;
}
3 C/C++基礎知識題
a)關鍵字volatile在編譯時是什麽意思?並給出三個不同使用場景的例子(可以用偽代碼或者文字描述)。
b)C語言中static關鍵字的具體作用是什麽?
c)下面三個變量聲明有什麽區別?請給出具體含義。
int const * p;
int * const p;
int常數* const p;
4嵌入式系統相關問題
A)對於整數變量A=0x12345678,請畫出它是如何以小端和大端的方式存儲在內存中的。
b)在ARM系統中,調用函數時,參數是如何傳遞的?
c)中斷(比如鍵盤中斷)和異常(比如被零除異常)有什麽區別?
5.設周期性任務P1,P2和P3的周期為T1,T2和T3分別為100,150,400;執行時間分別為20,40,100。請設計壹個任務調度的調度算法,滿足任務執行周期和任務周期。
優先級反轉是嵌入式系統中的壹個嚴重問題,必須引起足夠的重視。
a)首先請說明優先級倒置的問題。
b)許多RTOS提供優先級繼承和優先級上限來解決優先級反轉的問題。請討論這兩種策略。
參考答案:
1 5
風險存在是因為c = c++ % 5;這個表達式兩次修改C,行為未定義,C的值不確定。
int a = 0;//數據部分
int b;//數據部分
靜態電荷c;// BSS
int main(int argc,char *argv[])
{
char d = 4;//堆棧
靜態短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);
返回0;
}
a=2,b=100,c=2,d=6,e=5
2 a)ISR不能返回值;
B)ISR不能傳遞參數;
c)浮點壹般是不可重入的;
d)printf函數有重入和性能問題。
3 a)用volatile關鍵字定義壹個變量,相當於告訴編譯器這個變量的值會隨時變化,每次使用都需要去內存。
再次讀取它的值,不要隨意優化。
建議使用可變變量的地方:
(1)並行設備的硬件寄存器
(2)在中斷服務子程序中訪問的非自動變量(全局變量)。
(3)多線程應用中幾個任務共享的變量。
b)在函數體中,聲明為static的變量在調用該函數的過程中保持其值不變。
在模塊內部(但在函數外部),聲明為靜態的變量可以被模塊中使用的函數訪問,但不能被模塊外部的其他函數訪問。
參觀。它是壹個局部全局變量。
在模塊中,聲明為靜態的函數只能被該模塊中的其他函數調用。也就是說,該函數僅限於聲明其。
在模塊的局部範圍內使用。
靜態全局變量和普通全局變量有什麽區別?靜態全局變量只初始化壹次,以防止它在其他文件單元中被引用。
靜態局部變量和普通局部變量有什麽區別?靜態局部變量只初始化壹次,下壹次基於上壹次結果值;
靜態函數和普通函數有什麽區別?靜態函數在內存中只有壹個副本,普通函數在每次調用中都保留壹個副本。
c)指向常量整數的指針。
指向整數的常量指針。
指向常量整數的常量指針。
四
a) 0x12345678
小端大端正好相反。
高地址-> 0x12低地址-> 0x12
0x34 0x34
0x56 0x56
低位地址-> 0x78高位地址-> 0x78
b)參數< =4,通過R0~R3傳遞,> 4的通過疊壓傳遞。
c)例外:生成時必須考慮與處理器時鐘同步。實際上,異常也被稱為同步中斷。當處理器由於編程錯誤執行了錯誤的指令,或者在執行過程中出現特殊情況(比如缺頁)必須由內核處理時,處理器就會產生異常。
所謂中斷,應該是指外部硬件產生的壹個電信號,從cpu的中斷引腳進入,中斷cpu當前的運行;
所謂異常是指軟件運行過程中必須處理的壹些事件,cpu自動生成壹個陷阱來中斷當前操作,轉到異常處理過程。
異步和同步的區別
五
高優先級任務需要等待低優先級任務釋放資源,而低優先級任務等待中優先級任務的現象稱為優先級反轉。
優先級繼承策略:繼承已有阻塞任務的最高優先級作為其優先級,任務將退出臨界區並恢復。
復雜的初始優先級。
優先級上限:控制訪問關鍵資源的信號量的優先級上限。
優先級繼承策略對任務執行過程的影響相對較小,因為只有當高優先級任務申請已經被低優先級任務占用的關鍵資源時。
當這種情況發生時,低優先級任務的優先級將被提高。