【干貨分享】這份嵌入式筆試題,你能做對(duì)多少?
時(shí)間:2021-08-19 15:44:46
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]1.C語(yǔ)言中,修飾符volatile含義是什么?其應(yīng)用場(chǎng)合有哪些?volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲(chǔ)或讀取這個(gè)變量的時(shí)候,都會(huì)直接從變量地址中讀取數(shù)據(jù)。如果沒(méi)有volatile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲(chǔ),可能暫時(shí)使用...
1. C語(yǔ)言中,修飾符volatile含義是什么?其應(yīng)用場(chǎng)合有哪些?
volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲(chǔ)或讀取這個(gè)變量的時(shí)候,都會(huì)直接從變量地址中讀取數(shù)據(jù)。如果沒(méi)有volatile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲(chǔ),可能暫時(shí)使用寄存器中的值,如果這個(gè)變量由別的程序更新了的話,將出現(xiàn)不一致的現(xiàn)象。2. 請(qǐng)問(wèn)TCP/IP協(xié)議分為哪幾層?FTP協(xié)議在哪一層?
ISO/OSI的參考模型共有7層,由低層至高層分別為:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層物理層:在物理媒體上傳輸原始的數(shù)據(jù)比特流。?
數(shù)據(jù)鏈路層:將數(shù)據(jù)分成一個(gè)個(gè)數(shù)據(jù)幀,以數(shù)據(jù)幀為單位傳輸。有應(yīng)有答,遇錯(cuò)重發(fā)。?
網(wǎng)絡(luò)層:將數(shù)據(jù)分成一定長(zhǎng)度的分組,將分組穿過(guò)通信子網(wǎng)。?
傳輸層:提供不具體網(wǎng)絡(luò)的高效、經(jīng)濟(jì)、透明的端到端數(shù)據(jù)傳輸服務(wù)。?
會(huì)話層:進(jìn)程間的對(duì)話也稱為會(huì)話,會(huì)話層管理不同主機(jī)上各進(jìn)程間的對(duì)話。?
表示層:為應(yīng)用層進(jìn)程提供格式化的表示和轉(zhuǎn)換數(shù)據(jù)服務(wù)。?
應(yīng)用層:提供應(yīng)用程序訪問(wèn)OSI環(huán)境的手段。
應(yīng)用層:TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP、DNS?
表示層:文本:ASCII,EBCDIC
圖形:TIFF,JPEG,GIF,PICT
聲音:MIDI,MPEG,QUICKTIME
會(huì)話層:NFS、SQL、RPC 、X-WINDOWS、ASP(APPTALK會(huì)話協(xié)議)、SCP
傳輸層:TCP、UDP、SPX
網(wǎng)絡(luò)層:IP、IPX、ICMP、RIP、OSPF(Open Shortest Path First開(kāi)放式最短路徑優(yōu)先)?
數(shù)據(jù)鏈路層:SDLC、HDLC、PPP、STP(Spanning Tree Protocol)、幀中繼?
物理層:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45
3. 在網(wǎng)絡(luò)應(yīng)用中,函數(shù)htons,htonl,ntohs,ntohl的作用是什么?
uint32_t?htonl(uint32_t?hostlong);//32位的主機(jī)字節(jié)序轉(zhuǎn)換到網(wǎng)絡(luò)字節(jié)序?
uint16_t?htons(uint16_t?hostshort);//16位的主機(jī)字節(jié)序轉(zhuǎn)換到網(wǎng)絡(luò)字節(jié)序?
uint32_t?ntohl(uint32_t?netlong);//32位的網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換到主機(jī)字節(jié)序?
uint16_t?ntohs(uint16_t?netshort);//16位的網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換到主機(jī)字節(jié)序?
(皆為大小端的改變)
4. C語(yǔ)言中static函數(shù)與普通函數(shù)的區(qū)別是什么?
靜態(tài)函數(shù)在函數(shù)的返回類型前加上關(guān)鍵字static,函數(shù)就被定義成為靜態(tài)函數(shù)。函數(shù)的定義和聲明默認(rèn)情況下是extern的,但靜態(tài)函數(shù)只是在聲明他的文件當(dāng)中可見(jiàn),不能被其他文件所用。定義靜態(tài)函數(shù)的好處:- 其他文件中可以定義相同名字的函數(shù),不會(huì)發(fā)生沖突
- 靜態(tài)函數(shù)不能被其他文件所用。
- 內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)
- 初始化:未經(jīng)初始化的全局靜態(tài)變量會(huì)被程序自動(dòng)初始化為0(自動(dòng)對(duì)象的值是任意的,除非他被顯示初始化)
- 作用域:作用域仍為局部作用域,當(dāng)定義它的函數(shù)或者語(yǔ)句塊結(jié)束的時(shí)候,作用域隨之結(jié)束。
- 內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)(靜態(tài)存儲(chǔ)區(qū)在整個(gè)程序運(yùn)行期間都存在)
- 初始化:未經(jīng)初始化的全局靜態(tài)變量會(huì)被程序自動(dòng)初始化為0(自動(dòng)對(duì)象的值是任意的,除非他被顯示初始化)
- 作用域:全局靜態(tài)變量在聲明他的文件之外是不可見(jiàn)的。準(zhǔn)確地講從定義之處開(kāi)始到文件結(jié)尾。
- 不會(huì)被其他文件所訪問(wèn),修改
- 其他文件中可以使用相同名字的變量,不會(huì)發(fā)生沖突
5. 請(qǐng)實(shí)現(xiàn)內(nèi)存復(fù)制函數(shù)void memcpy(void *dst const void *src,int size)
void?*memcpy(void?*dest,?const?void?*src,?unsigned?int?size)
{
????if(dest==NULL?||?src==NULL)
????{
????????return?dest;
????}
????
????void?*temp?=?dest;
????while(size--)
????{
????????*(char?*)dest?=?*(char?*)src;
????????dest?=?(char?*)dest? ?1;
????????src?=?(char?*)src? ?1;
????}
????return?temp;
}
6、進(jìn)程間通信的方式有
- 管道(pipe),流管道(s_pipe)和有名管道(FIFO)
- 信號(hào)(signal)
- 消息隊(duì)列
- 共享內(nèi)存
- 信號(hào)量
- 套接字(socket)
7、IPv4把所有的IP地址分為A、B、C、D、E五類。請(qǐng)寫出B類地址和C類地址的范圍和掩碼,D類地址的用途是什么?
A類IP地址范圍:0.0.0.0到127.255.255.255B類IP地址范圍:128.0.0.0到191.255.255.255C類IP地址范圍:192.0.0.0到223.255.255.255D類IP地址范圍:224.0.0.0到239.255.255.255E類IP地址范圍:224.0.0.0到254.255.255.255D類地址用于多點(diǎn)播送E類地址保留,僅作實(shí)驗(yàn)和開(kāi)發(fā)用全零(“0.0.0.0”)地址指任意網(wǎng)絡(luò)。全“1”的IP地址(“255.255.255.255”)是當(dāng)前子網(wǎng)的廣播地址。8、請(qǐng)簡(jiǎn)述在linux中多進(jìn)程程序和多線程程序的區(qū)別。
9、寫一個(gè)標(biāo)準(zhǔn)的宏MINX,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)?
#define?MIN(A,?B)????((A)>(B)??(B)?:?(A))
10、什么是MMU,MMU的作用
MMU是Memory Management Unit(內(nèi)存管理單元)1)虛擬內(nèi)存。有了虛擬內(nèi)存,可以在處理器上運(yùn)行比實(shí)際物理內(nèi)存大的應(yīng)用程序。為了使用虛擬內(nèi)存,操作系統(tǒng)通常要設(shè)置一個(gè)交換分區(qū)(通常是硬盤),通過(guò)將不活躍的內(nèi)存中的數(shù)據(jù)放入交換分區(qū),操作系統(tǒng)可以騰出其空間來(lái)為其它的程序服務(wù)。虛擬內(nèi)存是通過(guò)虛擬地址來(lái)實(shí)現(xiàn)的。2)內(nèi)存保護(hù)。根據(jù)需要對(duì)特定的內(nèi)存區(qū)塊的訪問(wèn)進(jìn)行保護(hù),通過(guò)這一功能,我們可以將特定的內(nèi)存塊設(shè)置成只讀、只寫或是可同時(shí)讀寫11、關(guān)鍵字volatile有什么含義,并給出幾個(gè)應(yīng)用場(chǎng)合。
volatile的本意是“易變的” 由于訪問(wèn)寄存器的速度要快過(guò)RAM,所以編譯器一般都會(huì)作減少存取外部RAM的優(yōu)化,但有可能會(huì)讀臟數(shù)據(jù)。當(dāng)要求使用volatile 聲明的變量的值的時(shí)候,系統(tǒng)總是重新從它所在的內(nèi)存讀取數(shù)據(jù),即使它前面的指令剛剛從該處讀取過(guò)數(shù)據(jù)。而且讀取的數(shù)據(jù)立刻被保存。一般說(shuō)來(lái),volatile用在如下的幾個(gè)地方:- 1、中斷服務(wù)程序中修改的供其它程序檢測(cè)的變量需要加volatile;
- 2、多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加volatile;
- 3、存儲(chǔ)器映射的硬件寄存器通常也要加volatile說(shuō)明,因?yàn)槊看螌?duì)它的讀寫都可能由不同意義;
12、“棧 stack”和“堆 heap”有什么區(qū)別,寫兩個(gè)函數(shù)分別在棧上和堆上分配內(nèi)存,在堆上分配內(nèi)存應(yīng)注意哪些問(wèn)題?
- 1.申請(qǐng)方式
int b
; 系統(tǒng)自動(dòng)在棧中為b
開(kāi)辟空間heap:需要程序員自己申請(qǐng),并指明大小,在c中malloc函數(shù)p1 = (char *)malloc(10);
- 2.申請(qǐng)后系統(tǒng)的響應(yīng)
- 3.申請(qǐng)大小的限制
void?fun(void)
{
????int?a[10];
????int?*p?=?(int?*)malloc(10*sizeof(int));
????if(p?==?NULL)
????{
????????return;
????}
}
13、請(qǐng)指出下面程序的錯(cuò)誤
unsigned?char?i?=?10;?
char?b?=?100;?
char*?p;?
void?f(void)?
{?
????While(–-i>=0)?
????{?
???????*(p )?=?b;?
????}?
}
p沒(méi)有分配空間i是無(wú)符號(hào)型,自減操作會(huì)引發(fā)死循環(huán)14、TCP/IP通信建立的過(guò)程怎樣,端口有什么作用?
端口作用:(連接作用)就是讓運(yùn)輸層的各種應(yīng)用進(jìn)程都能將其數(shù)據(jù)通過(guò)端口向下交付給運(yùn)輸層,以及讓運(yùn)輸層知道應(yīng)當(dāng)將其報(bào)文段的數(shù)據(jù)向上通過(guò)端口交付給應(yīng)用層相應(yīng)的進(jìn)程END
掃碼關(guān)注華妹查看更多精彩內(nèi)容