嵌入式軟件開發崗秋招【寒武紀筆試篇】

嵌入式曆練者 2022-01-08 05:48:20 阅读数:792

嵌入式 嵌入 寒武

題目來源牛客網的嵌入式筆試題牛客網,由筆者親自整理,加上自己的理解和解題思路。此篇為寒武紀筆試題。

1.單片機IO口開漏輸出和推挽輸出有什麼區別?

開漏輸出只能輸出低電平,必須接上拉電阻才能輸出高電平。可以實現電平轉換和線與功能。所謂線與功能,即邏輯與,I2C總線判斷占用狀態就是根據這個原理。

推挽輸出既可以輸出高電平,又可以輸出低電平。推挽輸出的負載能力更强,輸出頻率更高。

輸出 0 時,N-MOS 導通,P-MOS 高阻,輸出0。
輸出 1 時,N-MOS 高阻,P-MOS 導通,輸出1(不需要外部上拉電路)

2.什麼是Nyquist采樣定理?如果需要通過512點FFT分析200-10KHz信號頻譜,頻譜分辨率不低於40Hz,此時采樣頻率需在什麼範圍?

解:(采樣頻率)fs=512x40Hz=20,480

在頻譜分析中,橫軸為頻率,縱軸為幅度(這個幅度不是指幅值,幅度要經過數學處理才是幅值,直流分量和諧波分量的處理不同)
分辨率—>就是頻譜中橫軸上相鄰兩個頻率之間的頻率間隔。或者說在頻率軸上的所能得到的最小頻率間隔f0=fs/N=1/NTs=1/T , 其中N為采樣點數,fs為采樣頻率,Ts為采樣間隔。所以NTs就是采樣前模擬信號的時間長度T

  • 分辨率=采樣頻率/采樣點數=fs/N

我做的2021電賽A題程序中2021年電子競賽四天三夜征程—-信號失真度測量裝置(A題),在fftOutput數組中,輸出的元素代錶幅度,如何由幅度處理為幅值。對於直流分量,幅度除以N(N為采樣點數)得到幅值,對於諧波分量,則幅度除以N/2。(別問我為啥,站在巨人的肩膀上,輔之實踐得真知——https://blog.csdn.net/spiremoon/article/details/100053495參考這篇博主說的)。

3.同步通信和异步通信有什麼區別?UART、SPI和I2C分別屬於什麼類型的通信方式?

以下內容在串行通信下討論:

(1).同步通信的接受時鐘和發送時鐘必須同步,即必須要時鐘信號才能定比特數據,也就是會通過一根專門的時鐘信號線。

(2).异步通信是以字符為單比特,相鄰兩字符之間的時間間隔可以任意長(我發了一個字符,但是我可以等個666秒才去發送下一個字符)。字符間异步,但字符裏面的比特是同步的

(3).异步通信的數據格式:起始比特1比特(低電平,你別問我為什麼,這是規定,OK),8比特數據,1比特奇偶校驗比特,停止比特1比特(規定比特高電平)。

(4).同步通信的數據格式:2個同步字符作為開始標志(就像媽媽叫你吃飯了,總要通知一下撒),n個數據比特(有多少就發多少,隨意!),2個CRC(什麼你不知道CRC?這個難記名字叫循環冗(rong)餘校驗,然後呢,自己查)。同步通信是以數據塊為單比特(數據塊就是連續的bit流),比特之間是同步。

(5).异步通信對硬件要求相對要低,電路簡單,傳送效率不高,而同步通信對硬件要求高,電路複雜,但傳送效率高(這亦是為什麼同步通信要求CRC校驗,而异步通信要求奇偶校驗,因為奇偶校驗簡單但漏檢率太高,在同步通信n個數據比特傳送中就顯得不够用,所以還得請大哥CRC校驗。

4.中斷是什麼?請簡述單片機中斷處理的過程

中斷處理的過程:

1.保護現場,將當前比特置的PC地址壓棧;

2.跳轉到中斷服務程序,執行中斷服務程序;

3.恢複現場:將棧頂的值回送給PC;

4.中斷返回:跳轉到被中斷的比特置開始執行下一個指令;(在ARM處理器中直接用傳送指令返回,而一些CPU是由專門的中斷返回指令)

5.相比於正常子函數,中斷服務函數有什麼特點和需要注意的地方?

(1)不能有返回值,不能向ISR傳遞參數。

(2)中斷服務函數應短小精悍,所以不能有延時。

(3)進入中斷服務函數是隨機的,不是主函數調用,或者說與主函數沒有半毛錢關系。

(4) printf(char * lpFormatString,…)以及浮點運算等函數會帶來函數重入和性能問題,不能在ISR中采用。

先解决怎麼進入中斷服務函數的?當中斷產生,PC指針强制跳轉到對應的中斷服務函數入口。中斷服務函數不是由主函數調用的,只要是中斷產生,則由PC指針强制跳轉中斷服務函數,中斷隨機產生,所以進入中斷便具有了隨機性,並不像下面 fA() fB() fC()函數已經事先安排好的,由main()調用。

也正因為其隨機性,如果ISR有返回值和參數傳入,則返回值返回給誰?參數又是誰去調用傳遞呢?顯然這個返回值毫無意義,如果有返回值,它必定需要進行壓棧操作,這樣一來何時出棧怎麼出棧將變得無法解决。

參考這篇博客:https://blog.csdn.net/qq_41092963/article/details/84544445

int main(){

fA();
fB();
fC();
}

6.請寫一段代碼,可以將輸入為”0.0.0.0”—“255.255.255.255”的字符串轉換為int型整數數組。

輸入:”255.255.255.255”

輸出:255 255 255 255 (數組)

版权声明:本文为[嵌入式曆練者]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080548200410.html