1.用指令#define 宣告乙個常數,用於表明1年中用多少秒(忽略閏年問題)
答:#define second_per_year (60*60*24*365)ul
2.寫乙個標準的巨集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()
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)
函式有什麼錯誤
答:*ptr的值可能被意想不到的改變,返回值不是期望的平方值
改:long square(volatile int *ptr)
10. 位操作
給定乙個整形變數a,寫兩片**,第乙個設定a的bit 3,第二個清除a的 bit 3
在以上兩個操作中,要保持其它位不變
答:#define bit3 (0x1 << 3)
static int a;
void set_bit3(void)
void clear_bit3(void)
11.訪問固定的記憶體位置
嵌入式系統經常要求程式設計師去訪問特定的記憶體位置的點,要求設定一絕對位址為0x6780的整型
變數的值為0x5566
答: int *p;
p = (int *)0x6780;
*p = 0x5566;
(訪問絕對位址把乙個整型,強制轉換成乙個指標是合法的)
__interrupt double compute_area(doble radius)
答:1)isr不能返回值
2)isr不能傳遞引數
3)有些編譯器不允許在isr中做浮點運算
4)printf有重入性問題
13. 下面**輸出什麼?為什麼?
void foo(void)
答:輸出》6,因為表示式中有符號和無符號型別時,所有操作
數都自動轉換為無符號型
14.評價下面的**
unsigned int zero = 0;
unsigned int compzero = 0xffff;
答:對乙個int 型不是16位的處理器不正確
unsigned int compzero = ~0;
嵌入式面試題
15 typedef 在c語言中頻繁用以宣告乙個已經存在的資料型別的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子 define dps struct s typedef struct s tps 以上兩種情況的意圖都是要定義dps 和 tps 作為乙個指向結構s指標。哪種方法更好呢?...
嵌入式面試題
1.main int ptr int a 1 printf d d a 1 ptr 1 這段程式的輸出是 a 2 2 b 2 1 c 2 5 d 以上均不是 2.考查自加操作 main 這段程式的輸出是 a i 4 j 2 b i 3 j 2 c i 3 j 4 d i 3 j 6 3.此題考查的是...
嵌入式面試題
以下是我找嵌入式面試時遇到的一些問題,答案以後慢慢補充。1.incline和巨集定義的區別 3.linux自旋鎖 4.程序,執行緒的概念 5.strcpy的使用,具體實現 6.雙向鍊錶的插入,刪除 7.大端小端概念 8.寫一段c程式檢測cpu是32位還是64位 9.malloc和new的使用 10....