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??這樣的話就可以增加程序的可讀性
同時移植性也增強。
11:嵌入式系統中經常要求程序去訪問某特定內存的特點,在某工程中,要求設定一個絕對地址0x6799的整型變量的值為0xaa66.
????? Int *ptr;
????? ptr=(int*)0x67a9;
????? *ptr=aa66
12:引用和指針有什么區別?
????? 1:應用必須初始化,指針不必;
?????? 2:引用處畫化后不能改變,指針可以被改變;
?????? 3:不存在指向空值的引用,但存在指向空值的指針;
?? 13:全局變量與局部變量在內存中是否有區別,是什么區別?
????????全局變量存儲在靜態數據庫,局部變量存儲在堆棧;
14:寫出float,bool,int類型與零的比較,假設變量為X:
?????? Int?:??? if(x==0)
?????? Float:??? if(x>0.0000001&&x<0.0000001)
?????? Bool:????? if(x==false)
15:Intertnet采用哪種網絡協議,該協議的主要層次結構?
?? TCP/IP協議
應用層/傳輸層/網絡層/數字鏈路層/物理層。
16:IP地址有兩部分組成:網絡號和主機號
17:程序的局部變量存儲在(棧)中,全局變量存儲于(靜態存儲區),動態申請數據存儲于(堆中);
18:編寫一個字符串復制函數: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++;
}
}
19:編寫一個函數實現字符串翻轉?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;
}
}
20:編寫一個函數實現字符串比較?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;
}
}
21:進程和線程的區別:
???? 1:調度:線程作為調度和分配的基本單元,進程作為擁有資源的基本單位;
????? 2:并發性:不僅進程可以并發執行,同一進程內的線程也可以并發執行。
????? 3:擁有資源:進程是擁有資源的基本獨立單元,線程不擁有資源,但可以訪問進程內的資源;
4:在創建或撤銷線程時,由于系統都要為之分配和回收內存資源,導致系統的開銷明顯大于創建或撤銷線程時的開銷。