2018年摩拜校招嵌入式工程師筆試卷
拓展:
嵌入式工程師題庫(kù)(適用于各大名廠筆試、軟考、計(jì)算機(jī)等級(jí)考試)
第1題:下面代碼片段中有哪些隱患或者錯(cuò)誤?
回答:
1、調(diào)用get2(m)函數(shù)的時(shí)候,沒(méi)有return,也不是全局變量,無(wú)法將new申請(qǐng)的內(nèi)存地址傳出,無(wú)法修改m的實(shí)際值;
2、調(diào)用m=get1()函數(shù)的時(shí)候,函數(shù)內(nèi)定義的數(shù)組是局部變量,對(duì)應(yīng)的內(nèi)存在這個(gè)函數(shù)結(jié)束的時(shí)候就會(huì)被釋放,因此return buf返回的地址是無(wú)效的,調(diào)用這樣的地址造成嚴(yán)重錯(cuò)誤;
3、調(diào)用memcpy(m,"aaa",3)函數(shù),m為int類型指針,并不是指針數(shù)組,往一個(gè)沒(méi)有權(quán)限的無(wú)效內(nèi)存空間拷貝數(shù)據(jù)是非法的。
第2題:用變量a給出以下定義:
一個(gè)指向指針的指針,它指向的指針是指向一個(gè)整型數(shù);
一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的;
一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針。
回答:
int **a;
int *a[10];
int (*a)[10];
第3題:簡(jiǎn)述SPI、IIC、UART接口的區(qū)別和各自收發(fā)數(shù)據(jù)的方法。
回答:
SPI:串行同步外設(shè)接口,全雙工通信,SPI 是一個(gè)同步協(xié)議接口,所有的傳輸都參照一個(gè)共同的時(shí)鐘,這個(gè)同步時(shí)鐘信號(hào)由主機(jī)(處理器)產(chǎn)生,接收數(shù)據(jù)的外設(shè)(從設(shè)備)使用時(shí)鐘來(lái)對(duì)串行比特流的接收進(jìn)行同步化。可能會(huì)有許多芯片連到主機(jī)的同一個(gè)SPI接口上,這時(shí)主機(jī)通過(guò)觸發(fā)從設(shè)備的片選輸入引腳來(lái)選擇接收數(shù)據(jù)的從設(shè)備,沒(méi)有被選中的外設(shè)將不會(huì)參與SPI傳輸。
SPI主要使用4個(gè)信號(hào):主機(jī)輸出/從機(jī)輸入(MOSI)、主機(jī)輸入/從機(jī)輸出(MISO)、串行SCLK或SCK和外設(shè)芯片(CS )。有些處理器有SPI接口專用的芯片選擇,稱為從機(jī)選擇(SS)。
主機(jī)和外設(shè)都包含一個(gè)串行移位寄存器,主機(jī)通過(guò)向它的SPI串行寄存器寫入一個(gè)字節(jié)來(lái)發(fā)起一次傳輸。寄存器是通過(guò)MOSI信號(hào)線將字節(jié)傳送給外設(shè),外設(shè)也將自己移位寄存器中的內(nèi)容通過(guò)MISO信號(hào)線返回給主機(jī),如下圖所示。這樣,兩個(gè)移位寄存器中的內(nèi)容就被交換了。外設(shè)的寫操作和讀操作是同步完成的,因此SPI成為一個(gè)很有效的協(xié)議。
IIC:?內(nèi)部集成電路總線,半雙工通信,只需要兩條線:一串行數(shù)據(jù)SDA線和串行時(shí)鐘SCL線,IIC總路線用兩線來(lái)連接多支路總線中的多個(gè)設(shè)備。這種總線是雙向、低速的,并與公共時(shí)鐘同步。可以直接將一個(gè)設(shè)備接到IIC總線上或是從該總線上取下,而不會(huì)影響其他設(shè)備。
利用IIC接口在設(shè)備之間進(jìn)行連接所使用的兩根線是SDA (串行數(shù)據(jù))和SCL (串行時(shí)鐘),它們都是開漏(open-drain), 通過(guò)一個(gè)上拉電阻接到正電源,因此在不使用的時(shí)候任保持高電平,IIC總線在傳送數(shù)據(jù)過(guò)程中共有3種類型信號(hào),它們分別是開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào),解析如下所示:
開始信號(hào): SCL為高電平時(shí),SDA 由高電平向低電平跳變,開始傳送數(shù)據(jù);
結(jié)束信號(hào): SCL為低電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù);
應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8位數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。
發(fā)送方發(fā)出的每個(gè)字節(jié)都必須經(jīng)過(guò)接收方確認(rèn),每個(gè)字節(jié)的第8個(gè)數(shù)據(jù)位一旦傳送結(jié)束,發(fā)送方就釋放數(shù)據(jù)線SDA。然后主機(jī)在SCL上產(chǎn)生一個(gè)額外的時(shí)鐘脈沖,這會(huì)觸發(fā)接收方通過(guò)將SDA置為低電平來(lái)表示對(duì)接收到的字節(jié)進(jìn)行;如果接收方?jīng)]能將SDA置為低電平,發(fā)送方就會(huì)中斷傳輸,并且采取適當(dāng)?shù)腻e(cuò)誤處理措施。
UART:?通用異步收發(fā)傳輸器,全雙工通信,異步式傳輸把每一個(gè)字符當(dāng)作獨(dú)立的信息來(lái)傳送,并按照一固定且預(yù)定的時(shí)序傳送,但在字符之間卻取決于字符與字符的任意時(shí)序。UART負(fù)責(zé)處理數(shù)據(jù)總線和串行口之間的串/并、并/串轉(zhuǎn)換,并規(guī)定了幀格式;通信雙方只要采用相同的幀格式和波特率,就能在未共享時(shí)鐘信號(hào)的情況下,僅用兩根信號(hào)線(Rx 和Tx)就可以完成通信過(guò)程,因此也稱為異步串行通信。
拓展學(xué)習(xí):詳解RS232、RS485、RS422、串口和握手
第4題:從以下幾種無(wú)線通信方式中選取一種了解的盡可能詳細(xì)的描述一下:BLE,Wi-Fi ,NFC,NB-IoT,eMTC。
回答:
互聯(lián)網(wǎng)上有很多解析,列舉兩例。
BLE:低功耗藍(lán)牙,2.4GHz ISM頻段,IEEE 802.15.1標(biāo)準(zhǔn),它利用許多智能手段最大限度地降低功耗。藍(lán)牙低能耗技術(shù)采用可變連接時(shí)間間隔,這個(gè)間隔根據(jù)具體應(yīng)用可以設(shè)置為幾毫秒到幾秒不等。另外,因?yàn)锽LE技術(shù)采用非常快速的連接方式,因此平時(shí)可以處于“非連接”狀態(tài)(節(jié)省能源),此時(shí)鏈路兩端相互間只是知曉對(duì)方,只有在必要時(shí)才開啟鏈路,然后在盡可能短的時(shí)間內(nèi)關(guān)閉鏈路。BLE技術(shù)的工作模式非常適合用于從微型無(wú)線傳感器(每半秒交換一次數(shù)據(jù))或使用完全異步通信的遙控器等其它外設(shè)傳送數(shù)據(jù)。這些設(shè)備發(fā)送的數(shù)據(jù)量非常少(通常幾個(gè)字節(jié)),而且發(fā)送次數(shù)也很少(例如每秒幾次到每分鐘一次,甚至更少)。
拓展:NB-IoT技術(shù)發(fā)展史漫談、NB-IoT綜合項(xiàng)目實(shí)戰(zhàn)開發(fā)背景及平臺(tái)
第5題:試描述MQTT、CoAP、HTTP三種協(xié)議的區(qū)別。
回答:
參見:物聯(lián)網(wǎng)協(xié)議對(duì)比(HTTP、websocket、XMPP、COAP、MQTT和DDS協(xié)議)
第6題:試描述TCP建立和斷開連接時(shí)的三次握手和四次揮手。
回答:
三次握手(Three-Way Handshake)即建立TCP連接時(shí),需要客戶端和服務(wù)端總共發(fā)送3個(gè)包以確認(rèn)連接的建立,如下圖所示:
第一次:客戶端發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器知道客戶端發(fā)送,自己接收正常。SYN=1,seq=x;
第二次:服務(wù)器發(fā)給客戶端,客戶端知道自己發(fā)送、接收正常,服務(wù)器接收、發(fā)送正常。ACK=1,ack=x+1,SYN=1,seq=y;
第三次:客戶端發(fā)給服務(wù)器:服務(wù)器知道客戶端發(fā)送,接收正常,自己接收,發(fā)送也正常.seq=x+1,ACK=1,ack=y+1。
四次揮手(Four-Way Wavehand)即終止TCP連接時(shí),需要客戶端和服務(wù)端總共發(fā)送4個(gè)包以確認(rèn)連接的斷開,如下圖所示:
第一次:客戶端請(qǐng)求斷開FIN,seq=u
第二次:服務(wù)器確認(rèn)客戶端的斷開請(qǐng)求ACK,ack=u+1,seq=v
第三次:服務(wù)器請(qǐng)求斷開FIN,seq=w,ACK,ack=u+1
第四次:客戶端確認(rèn)服務(wù)器的斷開ACK,ack=w+1,seq=u+1
第7題:一個(gè)無(wú)序的長(zhǎng)度為n的數(shù)組,找到最小的值,請(qǐng)用C語(yǔ)言編碼實(shí)現(xiàn)以下函數(shù)
int get_min(int* array, int n) {
}
回答(C語(yǔ)言編寫):
int get_min(int* array, int n)
{
int i ;
int min = array[0];
for(i=1; i { if(array[i] < min) min = array[i]; } return min; } 第8題:工廠生產(chǎn)摩拜單車包含兩道工序,工序A每5min生產(chǎn)一輛摩拜單車,生產(chǎn)完成后送到工序B檢測(cè),每1min檢測(cè)一輛,檢測(cè)失敗的需要返回工序A重新生產(chǎn);試用多線程(多任務(wù))的機(jī)制實(shí)現(xiàn)上述的生產(chǎn)工序,實(shí)現(xiàn)產(chǎn)能的最大化。 回答: 由于時(shí)間原因,后續(xù)更新。 IoT 單片機(jī) 嵌入式
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。