2018年摩拜校招嵌入式工程师笔试卷
拓展:
嵌入式工程師題庫(適用于各大名廠筆試、軟考、計(jì)算機(jī)等級考試)
第1題:下面代碼片段中有哪些隱患或者錯(cuò)誤?
回答:?
1、調(diào)用get2(m)函數(shù)的時(shí)候,沒有return,也不是全局變量,無法將new申請的內(nèi)存地址傳出,無法修改m的實(shí)際值;
2、調(diào)用m=get1()函數(shù)的時(shí)候,函數(shù)內(nèi)定義的數(shù)組是局部變量,對應(yīng)的內(nèi)存在這個(gè)函數(shù)結(jié)束的時(shí)候就會被釋放,因此return buf返回的地址是無效的,調(diào)用這樣的地址造成嚴(yán)重錯(cuò)誤;
3、調(diào)用memcpy(m,"aaa",3)函數(shù),m為int類型指針,并不是指針數(shù)組,往一個(gè)沒有權(quán)限的無效內(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題:簡述SPI、IIC、UART接口的區(qū)別和各自收發(fā)數(shù)據(jù)的方法。
回答:
SPI:串行同步外設(shè)接口,全雙工通信,SPI 是一個(gè)同步協(xié)議接口,所有的傳輸都參照一個(gè)共同的時(shí)鐘,這個(gè)同步時(shí)鐘信號由主機(jī)(處理器)產(chǎn)生,接收數(shù)據(jù)的外設(shè)(從設(shè)備)使用時(shí)鐘來對串行比特流的接收進(jìn)行同步化。可能會有許多芯片連到主機(jī)的同一個(gè)SPI接口上,這時(shí)主機(jī)通過觸發(fā)從設(shè)備的片選輸入引腳來選擇接收數(shù)據(jù)的從設(shè)備,沒有被選中的外設(shè)將不會參與SPI傳輸。
SPI主要使用4個(gè)信號:主機(jī)輸出/從機(jī)輸入(MOSI)、主機(jī)輸入/從機(jī)輸出(MISO)、串行SCLK或SCK和外設(shè)芯片(CS )。有些處理器有SPI接口專用的芯片選擇,稱為從機(jī)選擇(SS)。
主機(jī)和外設(shè)都包含一個(gè)串行移位寄存器,主機(jī)通過向它的SPI串行寄存器寫入一個(gè)字節(jié)來發(fā)起一次傳輸。寄存器是通過MOSI信號線將字節(jié)傳送給外設(shè),外設(shè)也將自己移位寄存器中的內(nèi)容通過MISO信號線返回給主機(jī),如下圖所示。這樣,兩個(gè)移位寄存器中的內(nèi)容就被交換了。外設(shè)的寫操作和讀操作是同步完成的,因此SPI成為一個(gè)很有效的協(xié)議。
IIC:?內(nèi)部集成電路總線,半雙工通信,只需要兩條線:一串行數(shù)據(jù)SDA線和串行時(shí)鐘SCL線,IIC總路線用兩線來連接多支路總線中的多個(gè)設(shè)備。這種總線是雙向、低速的,并與公共時(shí)鐘同步。可以直接將一個(gè)設(shè)備接到IIC總線上或是從該總線上取下,而不會影響其他設(shè)備。
利用IIC接口在設(shè)備之間進(jìn)行連接所使用的兩根線是SDA (串行數(shù)據(jù))和SCL (串行時(shí)鐘),它們都是開漏(open-drain), 通過一個(gè)上拉電阻接到正電源,因此在不使用的時(shí)候任保持高電平,IIC總線在傳送數(shù)據(jù)過程中共有3種類型信號,它們分別是開始信號、結(jié)束信號和應(yīng)答信號,解析如下所示:
-
開始信號: SCL為高電平時(shí),SDA 由高電平向低電平跳變,開始傳送數(shù)據(jù);
-
結(jié)束信號: SCL為低電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù);
-
應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8位數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號后,等待受控單元發(fā)出一個(gè)應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。
發(fā)送方發(fā)出的每個(gè)字節(jié)都必須經(jīng)過接收方確認(rèn),每個(gè)字節(jié)的第8個(gè)數(shù)據(jù)位一旦傳送結(jié)束,發(fā)送方就釋放數(shù)據(jù)線SDA。然后主機(jī)在SCL上產(chǎn)生一個(gè)額外的時(shí)鐘脈沖,這會觸發(fā)接收方通過將SDA置為低電平來表示對接收到的字節(jié)進(jìn)行;如果接收方?jīng)]能將SDA置為低電平,發(fā)送方就會中斷傳輸,并且采取適當(dāng)?shù)腻e(cuò)誤處理措施。
UART:?通用異步收發(fā)傳輸器,全雙工通信,異步式傳輸把每一個(gè)字符當(dāng)作獨(dú)立的信息來傳送,并按照一固定且預(yù)定的時(shí)序傳送,但在字符之間卻取決于字符與字符的任意時(shí)序。UART負(fù)責(zé)處理數(shù)據(jù)總線和串行口之間的串/并、并/串轉(zhuǎn)換,并規(guī)定了幀格式;通信雙方只要采用相同的幀格式和波特率,就能在未共享時(shí)鐘信號的情況下,僅用兩根信號線(Rx 和Tx)就可以完成通信過程,因此也稱為異步串行通信。
拓展學(xué)習(xí):詳解RS232、RS485、RS422、串口和握手
第4題:從以下幾種無線通信方式中選取一種了解的盡可能詳細(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í)鏈路兩端相互間只是知曉對方,只有在必要時(shí)才開啟鏈路,然后在盡可能短的時(shí)間內(nèi)關(guān)閉鏈路。BLE技術(shù)的工作模式非常適合用于從微型無線傳感器(每半秒交換一次數(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ā)背景及平臺
第5題:試描述MQTT、CoAP、HTTP三種協(xié)議的區(qū)別。
回答:
參見:物聯(lián)網(wǎng)協(xié)議對比(HTTP、websocket、XMPP、COAP、MQTT和DDS協(xié)議)
第6題:試描述TCP建立和斷開連接時(shí)的三次握手和四次揮手。
回答:
三次握手(Three-Way Handshake)即建立TCP連接時(shí),需要客戶端和服務(wù)端總共發(fā)送3個(gè)包以確認(rèn)連接的建立,如下圖所示:
- 第一次:客戶端發(fā)送請求到服務(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)連接的斷開,如下圖所示:
- 第一次:客戶端請求斷開FIN,seq=u
- 第二次:服務(wù)器確認(rèn)客戶端的斷開請求ACK,ack=u+1,seq=v
- 第三次:服務(wù)器請求斷開FIN,seq=w,ACK,ack=u+1
- 第四次:客戶端確認(rèn)服務(wù)器的斷開ACK,ack=w+1,seq=u+1
第7題:一個(gè)無序的長度為n的數(shù)組,找到最小的值,請用C語言編碼實(shí)現(xiàn)以下函數(shù)
int get_min(int* array, int n) {}
?回答(C語言編寫):
int get_min(int* array, int n)
{int i ;int min = array[0];for(i=1; i<n; i++){if(array[i] < min)min = array[i];}return min;
}
第8題:工廠生產(chǎn)摩拜單車包含兩道工序,工序A每5min生產(chǎn)一輛摩拜單車,生產(chǎn)完成后送到工序B檢測,每1min檢測一輛,檢測失敗的需要返回工序A重新生產(chǎn);試用多線程(多任務(wù))的機(jī)制實(shí)現(xiàn)上述的生產(chǎn)工序,實(shí)現(xiàn)產(chǎn)能的最大化。
回答:
由于時(shí)間原因,后續(xù)更新。
?
總結(jié)
以上是生活随笔為你收集整理的2018年摩拜校招嵌入式工程师笔试卷的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 GPIO的原理、特性、选型和
- 下一篇: 基于Python的人脸自动戴口罩系统