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