嵌入式面試問題
1.講一下STM32的時(shí)鐘系統(tǒng)
??現(xiàn)總結(jié)下:首先是時(shí)鐘源輸入時(shí)鐘信號(hào)到單片機(jī),然后單片機(jī)對(duì)輸入的時(shí)鐘信號(hào)進(jìn)行倍頻和分頻處理,再將處理后的時(shí)鐘信號(hào)輸出至系統(tǒng),外設(shè)或外部接口。
??先看這張圖,最外面的線上的方格是時(shí)鐘相關(guān)的外部接口,OSC接口用于連接外部石英晶振時(shí)鐘電路,最下面的接口用于內(nèi)部時(shí)鐘信號(hào)的輸出。如圖所示:
??然后我們介紹時(shí)鐘源輸入,單片機(jī)需要通過其產(chǎn)生的時(shí)鐘信號(hào)來控制電路工作。最常見的時(shí)鐘電路有RC和OSC兩種時(shí)鐘電路。RC時(shí)鐘精度低且體積小,OSC正好相反。因此單片機(jī)往往內(nèi)置RC時(shí)鐘,若需要更高精度則需要外界OSC時(shí)鐘。
??我們現(xiàn)在對(duì)時(shí)鐘電路進(jìn)行逐個(gè)分析:先介紹RC電路,如圖所示,上面寫了8MHz,HSI,RC。分別表示了時(shí)鐘頻率,時(shí)鐘類型(高速內(nèi)部時(shí)鐘),RC表示電阻電容震蕩器時(shí)鐘電路。如圖所示:
??在看第二個(gè),由此可知,時(shí)鐘頻率的范圍是4-16MHz,它的類型是外部的高速石英晶振時(shí)鐘。第三個(gè),時(shí)鐘類型LSE就是低速石英晶振時(shí)鐘,頻率是32.768KHz。第四個(gè),時(shí)鐘類型是內(nèi)部的低速阻容時(shí)鐘,頻率為40KHz。如圖所示:
??我們繼續(xù)看時(shí)鐘系統(tǒng)手冊(cè),綠色豎著的梯形結(jié)構(gòu)是選擇器開關(guān)。他的作用是:在多個(gè)時(shí)鐘輸入的同時(shí),選擇一個(gè)作為輸出。寬邊的為輸入時(shí)鐘信號(hào)部分,窄邊的為選擇后的輸出信號(hào)。然后介紹黃色框線標(biāo)注的部分為預(yù)分頻器,它的作用是用于將輸入的時(shí)鐘信號(hào)進(jìn)行分頻輸出。接著介紹紅色框線部分,它是倍頻器,起作用是完成倍頻功能,將輸入的時(shí)鐘源進(jìn)行倍頻輸出。最后看藍(lán)色框線標(biāo)注的部分,它是數(shù)字信號(hào)電路里的與門。用來控制時(shí)鐘信號(hào)的導(dǎo)通與否。默認(rèn)為了降低功耗為關(guān)閉狀態(tài),即控制端為低電平,當(dāng)需要使用外設(shè)時(shí),會(huì)通過程序讓其下端也就是控制端處于高電平,使上端的時(shí)鐘信號(hào)導(dǎo)通。時(shí)鐘系統(tǒng)圖如下:
??接下來介紹時(shí)鐘系統(tǒng)的線路連接,從圖中我們可以看到,內(nèi)部高速阻容時(shí)鐘輸出一共有三個(gè)部分,第一個(gè)是提供給flash編程接口,第二個(gè)是通過系統(tǒng)時(shí)鐘的選擇器到達(dá)系統(tǒng)時(shí)鐘。第三個(gè)是想通過二分頻之后,通過鎖相環(huán)的選擇器進(jìn)入鎖相環(huán)。外部高速石英晶振時(shí)鐘有四個(gè)輸出,第一個(gè)是直接通過系統(tǒng)時(shí)鐘的選擇器到達(dá)系統(tǒng)時(shí)鐘。第二個(gè)是通過第一個(gè)選擇器之后再通過橙色的這條線到達(dá)鎖相環(huán),第三個(gè)是二分頻之后通過選擇器再通過橙色的這條路線到達(dá)鎖相環(huán)。第四個(gè)是經(jīng)過128分配之后至實(shí)時(shí)時(shí)鐘。外部低速石英晶振時(shí)鐘,它只有一個(gè),就是直接輸出至實(shí)時(shí)時(shí)鐘。內(nèi)部的低速阻容時(shí)鐘,它有兩條輸出路線,第一個(gè)是直接到達(dá)實(shí)時(shí)時(shí)鐘,直接輸出至獨(dú)立看門狗。如圖所示:
??然后我們講下重點(diǎn)鎖相環(huán),來看鎖相環(huán)的輸入及輸出。首先鎖相環(huán)的第一個(gè)輸入是內(nèi)部的高速時(shí)鐘二分頻之后輸入到鎖相環(huán),即紅色最下面那一條線,第二個(gè)輸入是外部高速時(shí)鐘,即藍(lán)色的第二條再通過棕色那條,第三個(gè)輸入是外部高速時(shí)鐘二分頻,即藍(lán)色的第三條,那條除以2的再經(jīng)過棕色那條。它的輸出主要有兩部分,第一部分是預(yù)分頻后至USB接口,也就是上面的那條黃色路線。第二部分是直接到達(dá)系統(tǒng)時(shí)鐘,即下面的那條黃色路線。示意圖如下:
??接著來講系統(tǒng)時(shí)鐘的輸入輸出,首先系統(tǒng)時(shí)鐘的額輸入部分有三種選擇,第一是內(nèi)部高速時(shí)鐘,即紅色的第二條線。第二是倍頻器,即黃色的下面那條線。第三個(gè)輸入是外部高速時(shí)鐘,即藍(lán)色的第一條線。它的輸出有三個(gè)部分,第一個(gè)是IIS2,也就是集成電路內(nèi)置的音頻總線。第二是IIS3,第三個(gè)是AHB總線的預(yù)分頻器。最后講下主時(shí)鐘輸出,它的輸入有四個(gè)部分,第一個(gè)是倍頻器,第二個(gè)是內(nèi)部高速時(shí)鐘,第三個(gè)是內(nèi)部高速時(shí)鐘,第四個(gè)是系統(tǒng)時(shí)鐘。主時(shí)鐘的輸出只有一個(gè)就是外部接口。上述示意圖如下:
??這樣子就理清了時(shí)鐘主體部分及主體路線的作用。
2.C語言中堆和棧的區(qū)別
??堆棧和內(nèi)存的共同特點(diǎn)就是空間都是在內(nèi)存上,也就說都是在ram上。
- 堆是一個(gè)動(dòng)態(tài)的概念,棧是一個(gè)靜態(tài)的概念。
- 棧是在編譯的時(shí)候確定的,堆是在運(yùn)行的時(shí)候確定的。
- 棧的大小在編譯的時(shí)候就已經(jīng)定好了,堆的大小有可能是一個(gè)動(dòng)態(tài)變化的概念,取決于程序運(yùn)行計(jì)算到那一步的具體的數(shù)據(jù)。一般都是根據(jù)使用需求來選擇堆或者棧。
- 從訪問效率上來說,因?yàn)槎咽莿?dòng)態(tài)的,棧是靜態(tài)的,所以堆的速度要慢。
- 再看另外一個(gè)特點(diǎn)就是訪問權(quán)限方面,棧在訪問權(quán)限上面的特點(diǎn)如下,一個(gè)函數(shù)的調(diào)用,訪問的數(shù)據(jù)都是在棧上的。這個(gè)函數(shù)調(diào)用以后,它棧上的數(shù)據(jù)無法被另一個(gè)函數(shù)訪問。簡單來說就是不同函數(shù)之間的棧數(shù)據(jù)不能共享,這個(gè)原則也適用于多線程。堆是不一樣的,堆是在程序進(jìn)程中的堆,只要在這個(gè)進(jìn)程上,所有的線程都可以訪問這個(gè)堆上的數(shù)據(jù)。堆上的數(shù)據(jù)申請(qǐng)?jiān)L問之后,在不同的語言下,可能處理的環(huán)境也是不一樣的。
- 然后說下使用堆和使用棧的環(huán)境條件,當(dāng)你對(duì)于上次的數(shù)據(jù)不確定,那就用堆而不知棧,但你確定的話,由于效率的問題,肯定要用棧,因?yàn)樗麜?huì)極大的提高你的運(yùn)行速度,如果使用的是特別龐大的內(nèi)存,一般不去用棧而是用堆,因?yàn)橛猛炅艘s快釋放掉。
3.GPIO的輸出方式
??輸出的方式由控制器和兩個(gè)MOS管組成,這兩個(gè)mos管一個(gè)為Nmos,一個(gè)為Pmos,根據(jù)兩個(gè)mos管的開關(guān)情況來設(shè)置輸出模式。
- 推挽輸出:IO口高電平時(shí),電流輸出,IO口低電平時(shí),電流流進(jìn)
- 開漏輸出:Q1一直關(guān)閉,根據(jù)Q2改變IO的電壓,接一個(gè)上拉電阻,當(dāng)Q2關(guān)閉時(shí),為高阻態(tài),外接接口就可以被上拉到目標(biāo)電壓。
4.單片機(jī)上電之后不運(yùn)行
- 先檢查電源電壓的問題,用萬用表測(cè)量接地引腳和電源引腳之間的電壓。
- 檢查復(fù)位引腳電壓是否正常。測(cè)一下按下和松開復(fù)位按鍵的電壓值。
- 檢查晶振是否起震,用示波器看晶振引腳的波形。
- 如果電源不穩(wěn)定的話,可以在電源引腳和接地引腳之間接一個(gè)0.1uf的電容改善一下。
5.舉例你用過的單片機(jī)和主要參數(shù)
??這里我就以我用過的STM32單片機(jī)為例,
STM32C8T6的參數(shù)
- 是一個(gè)基于ARM Cortex—M3內(nèi)核的32位微控制器
- 程序存儲(chǔ)容量是64KB,需要電壓2V-3.6V,工作溫度為-40°-85°。
- 37個(gè)GPIO
- 2個(gè)12bitADC合計(jì)12路通道,外部通道:PA0-PA7+PB0-PB1,內(nèi)部通道:溫度傳感器通道,內(nèi)部參考電壓通道。
- 4個(gè)定時(shí)器,其中TM1帶死區(qū)(死區(qū)就是在上半橋關(guān)斷后,延遲一段時(shí)間再打開下半橋或在下半橋關(guān)斷后,延遲一段時(shí)間再打開上半橋,從而避免功率元件燒毀。這段延遲時(shí)間就是死區(qū)。)插入,常用于PWM控制電機(jī)。
- 通信窗口:兩個(gè)IIC,兩個(gè)SPI,3個(gè)USART,一個(gè)CAN
- 系統(tǒng)時(shí)鐘,內(nèi)部時(shí)鐘最高可倍頻到64MHz,外部時(shí)鐘最高可倍頻到72MHz。
STM32F407VET6的參數(shù)
- 基于ARN Cortex—M4內(nèi)核的323位微控制器
- 存儲(chǔ)容量512KB閃存,192KBSRAM,
- 12位精度,16通道ADC
- 3個(gè)IIC,3個(gè)SPI,3個(gè)USART,1個(gè)CAN
- 外部晶振最高180MHz
6.一個(gè)溫度傳感器按照正確的使用方式和參數(shù)指標(biāo)對(duì)人體測(cè)量溫度后一直都是35°這是為什么
??因?yàn)樵摐囟葌鞲心K測(cè)出的溫度為表?溫度,?實(shí)際上表?溫度和實(shí)際體溫是有差距的。
7.結(jié)構(gòu)體,聯(lián)合體和sizeof方面的知識(shí)
- 結(jié)構(gòu)體:結(jié)構(gòu)體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合,也叫結(jié)構(gòu)。關(guān)于其struct聲明的位置,也就是這段代碼要放到哪里。同樣這也是具有作用域的。這種聲明如果放在任何函數(shù)的外面,那么則可選標(biāo)記可以在本文件中,該聲明的后面的所有函數(shù)都可以使用。如果這種聲明在某個(gè)函數(shù)的內(nèi)部,則它的標(biāo)記只能在內(nèi)部使用,并且在其聲明之后。
- 聯(lián)合體:在同一個(gè)內(nèi)存空間中存儲(chǔ)不同的數(shù)據(jù)類型。聯(lián)合體內(nèi)數(shù)據(jù)是按地址對(duì)齊的。具體是高位數(shù)據(jù)還是低位數(shù)據(jù)要看平臺(tái)的大小端模式,51是大端,stm32默認(rèn)是小端,如果其他編譯器還請(qǐng)自測(cè)。僅僅用了一條減法指令就達(dá)到了除法、取余的操作,聯(lián)合體的應(yīng)用范圍非常廣泛,可以用于優(yōu)化內(nèi)存使用、處理二進(jìn)制數(shù)據(jù)等,在進(jìn)行高頻率定時(shí)時(shí)尤為有用。但是只能同時(shí)訪問聯(lián)合體中的一個(gè)成員。
- sizeof:sizeof是C語言中保留關(guān)鍵字,也可以認(rèn)為是一種運(yùn)算符,單目運(yùn)算符。sizeof實(shí)際上是獲取了數(shù)據(jù)在內(nèi)存中所占用的存儲(chǔ)空間,以字節(jié)為單位來計(jì)數(shù)。
8.C語言考察功底的相關(guān)例子
博客園的C語言功底測(cè)試問題
宏的一些用法和注意事項(xiàng)
9.STM32中斷處理流程
??先中斷初始化,然后CPU正常運(yùn)行程序,產(chǎn)生中斷,處理中斷內(nèi)的程序,繼續(xù)檢查中斷。具體的介紹這個(gè)文章可以看看:具體介紹中斷異常和處理過程
10.486有幾根線
??RS485通信系統(tǒng)通常采用三根線,分別為信號(hào)線,地線和電源線。信號(hào)線由兩根線組成,分別用于發(fā)送和接收數(shù)據(jù);地線由一根線組成,主要用于接地和接入外部電源;電源線由一根線組成,主要用于接入外部電源,以給接收器提供電源。
11.串口和并口的區(qū)別
這篇文章寫的很詳細(xì)串口和并口的區(qū)別
12.傳感器上輸出引腳是高阻抗好還是低阻抗好
高阻抗好。
- 傳感器的輸出引腳采用高阻抗設(shè)計(jì),可以減小對(duì)傳感器的負(fù)載,同時(shí)也有利于減小電源消耗,提高系統(tǒng)的靈敏度和精度。
- 在設(shè)計(jì)傳感器輸出電路時(shí),需要根據(jù)具體的應(yīng)用場(chǎng)景和系統(tǒng)需求進(jìn)行綜合考慮,權(quán)衡高阻抗和低阻抗的優(yōu)缺點(diǎn),選擇合適的方案。
13.C語言頭文件的工作原理
- 預(yù)處理階段:編譯器以C文件作為一 個(gè)單元,首先讀這個(gè)C文件,發(fā)現(xiàn)第一句與第二句是包含一個(gè)頭文件,就會(huì)在所有搜索路徑中尋找這兩個(gè)文件;
補(bǔ)充一個(gè)知識(shí)點(diǎn):
#include <>格式:引用標(biāo)準(zhǔn)庫頭文件,編譯器從標(biāo)準(zhǔn)庫目錄開始搜索;
#include ""格式:引用非標(biāo)準(zhǔn)庫的頭文件,編譯器從用戶的工作目錄開始搜索. - 找到之后,就會(huì)將相應(yīng)頭文件中再去處理宏,變量, 函數(shù)聲明,嵌套的頭文件包含等,檢測(cè)依賴關(guān)系,進(jìn)行宏替換,看是否有重復(fù)定義與聲明的情況發(fā)生,最后將那些文件中所有的東東全部掃描進(jìn)這個(gè)當(dāng)前的C文件 中,形成一個(gè)中間“C文件”;
- 編譯階段 :在上一步中相當(dāng)于將那個(gè)頭文件中的test變量掃描進(jìn)了一個(gè)中間C文件,那么test變量就變成了這個(gè)文件中的一個(gè)全局變量,此時(shí)就將所有這個(gè)中間C文件的所有變量,函數(shù)分配空間,將各個(gè)函數(shù)編譯成二進(jìn)制碼,按照特 定目標(biāo)文件格式生成目標(biāo)文件,在這種格式的目標(biāo)文件中進(jìn)行各個(gè)全局變量,函數(shù)的符號(hào)描述,將這些二進(jìn)制碼按照一定的標(biāo)準(zhǔn)組織成一個(gè)目標(biāo)文件;
- 連接階段 :將上一步成生的各個(gè)目標(biāo)文件,根據(jù)一些參數(shù),連接生成最終的可 執(zhí)行文件,主要的工作就是重定位各個(gè)目標(biāo)文件的函數(shù),變量等,相當(dāng)于將這個(gè)目標(biāo)文件中的二進(jìn)制碼按一定的規(guī)范合到一個(gè)文件中再回到C文件與頭文件各寫什么內(nèi)容的話題上:理論上來說C文件與頭文件里的內(nèi)容,只要是C語言所支持的,無論寫什么都可以的,比如你在頭文件中寫函數(shù)體,只要在任何一個(gè)C文件包含此頭文件就可以將這個(gè)函數(shù)編譯成目標(biāo)文件的一部分;
14.C語言指針的簡單介紹
??指針是一種單純的數(shù)據(jù)類型,本質(zhì)上指針變量和普通變量沒什么區(qū)別,指針變量一般用來存儲(chǔ)地址,&為取地址操作符,*為取值操作符。
15.正確理解關(guān)鍵字CONST
??首先最常用的就是使用const來修飾一個(gè)變量,通過const之后,這個(gè)變量的值在初始化后就不會(huì)再被改變。
16.CAN總線介紹
??CAN(Controller Area Network),要進(jìn)行CAN通訊需要專門的CAN收發(fā)芯片,單片機(jī)與CAN收發(fā)芯片進(jìn)行數(shù)據(jù)通訊時(shí),普通的高低電平信號(hào),就會(huì)被轉(zhuǎn)化為差分信號(hào)。差分信號(hào)具有抗干擾作用。CAN傳輸?shù)囊粠瑪?shù)據(jù)里面,首先是起始位,然后是啟示碼(用來識(shí)別信息發(fā)送對(duì)象),然后是遠(yuǎn)程請(qǐng)求或者數(shù)據(jù)幀的類型,一個(gè)是1一個(gè)是0,接下來6位是控制碼(用于控制數(shù)據(jù)長度),接下來是16位CRC碼(用于確保數(shù)據(jù)的準(zhǔn)確性),然后是兩位ACK碼,最后是7位結(jié)束位。
17.什么是SPI,什么是IIC,什么是UART
??IIC是飛利浦公司開發(fā)的一種兩線式串行,半雙工同步通信總線,可以掛載多個(gè)參與通信的器件,常用于板內(nèi)通信,比如單片機(jī)與外圍芯片之間短距離,低速的信號(hào)傳輸。IIC有兩條線,一條SCL時(shí)鐘線用于同步,一條SDA數(shù)據(jù)線用于傳輸數(shù)據(jù)。
??IIC通信的一般流程如下:文章來源:http://www.zghlxwxcb.cn/news/detail-821559.html
- 主機(jī)發(fā)送起始位并進(jìn)行從機(jī)尋址
- 得到應(yīng)答后主機(jī)開始發(fā)送/讀取數(shù)據(jù)位
- 數(shù)據(jù)發(fā)送/讀取完成,主機(jī)發(fā)送停止位結(jié)束此次通信
??SPI是串行外圍設(shè)備接口,是一種高速、全雙工、同步通信總線,常用于單片機(jī)和EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,數(shù)字信號(hào)處理器等器件的通信,它主要是主從方式通信,通常只有一個(gè)主機(jī)和數(shù)個(gè)從機(jī)。標(biāo)準(zhǔn)SPI有四根線,分別為SCLK:時(shí)鐘信號(hào),由主機(jī)產(chǎn)生,MOSI:主機(jī)給從機(jī)發(fā)送指令或數(shù)據(jù)的通道,MISO:主機(jī)讀取從機(jī)的狀態(tài)或數(shù)據(jù)的通道,CS:從機(jī)片選使能信號(hào)。
??UART是通用異步收發(fā)器,是一種通用串行、異步通信總線,該總線有兩條數(shù)據(jù)線,可以實(shí)現(xiàn)全雙工的發(fā)送和接收,常用于單片機(jī)與單片機(jī)或外部輔助設(shè)備之間的通信。 UART在發(fā)送數(shù)據(jù)時(shí)先發(fā)送低位后發(fā)送高位,當(dāng)總線處于空閑狀態(tài)時(shí),線路保持高電平,發(fā)送數(shù)據(jù)時(shí),會(huì)先發(fā)送一個(gè)0.然后依次從低位到高位發(fā)送八位數(shù)據(jù)。八位數(shù)據(jù)傳輸完成后會(huì)發(fā)送一個(gè)1.下面說說UART應(yīng)用的場(chǎng)景,RS232 9針串行接口,一般用于計(jì)算機(jī)和單片機(jī)之間的通信。USB轉(zhuǎn)串口,這個(gè)是目前計(jì)算機(jī)和單片機(jī)之間的通信,還有一些控制器中,主輔控制芯片中也會(huì)利用UART通信協(xié)議進(jìn)行信號(hào)傳輸。整體來說,UART多用于板間通信。
18.自己的職業(yè)規(guī)劃
這個(gè)就根據(jù)自己的實(shí)際狀況來準(zhǔn)備。文章來源地址http://www.zghlxwxcb.cn/news/detail-821559.html
到了這里,關(guān)于嵌入式面試提問的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!