嵌入式筆試面試題目系列(五)
本系列將按照類別對題目進行分類整理,重要的地方標上星星,這樣有利于大家打下堅實的基礎。
第六章 單片機常見面試題
1、ROM與RAM
這一點我另一篇文章講解過,這里放鏈接:
ROM與RAM的區(qū)別
2、 IO口工作方式(學過STM32的人應該很熟悉)
上拉輸入、下拉輸入、推挽輸出、開漏輸出。
3、請說明總線接口USRT、I2C、USB的異同點
(串/并、速度、全/半雙工、總線拓撲等)
4、IIC協(xié)議時序圖
必須會畫出來,我面試被問到過,讓我畫,我畫了個大概。(面試驅(qū)動崗必須會)
IIC協(xié)議有兩根線,一根SCL時鐘線,一根SDA數(shù)據(jù)線,如圖可以看到開始信號和結(jié)束信號的電平狀態(tài)。開始后,因為IIC總線可以掛在很多設備(不超過8個),所以先發(fā)送一個設備地址,選中這個設備,設備地址最后一位代表了是寫還是讀。選中設備后,再發(fā)送寄存器地址,代表選中某個寄存器,再開始傳輸數(shù)據(jù)。
八位設備地址=7位從機地址+讀/寫
給地址添加一個方向位位用來表示接下來數(shù)據(jù)傳輸?shù)姆较颍?/p>
0表示主設備向從設備(write)寫數(shù)據(jù),
1表示主設備向從設備(read)讀數(shù)據(jù)

開始信號:SCL 為高電平時,SDA 由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號:SCL 為高電平時,SDA 由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
應答信號:接收數(shù)據(jù)的 IC 在接收到 8bit 數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的 IC 發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU 向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應答信號,CPU 接收到應答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應答信號,由判斷為受控單元出現(xiàn)故障。
IIC信號在數(shù)據(jù)傳輸過程中,當SCL=1高電平時,數(shù)據(jù)線SDA必須保持穩(wěn)定狀態(tài),不允許有電平跳變,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。SCL=1時 數(shù)據(jù)線SDA的任何電平變換會看做是總線的起始信號或者停止信號。
IIC我也有一篇文章有講解,請看鏈接:
IIC總線最多可以掛多少個設備
5、單片機的SP指針始終指向
棧頂
6、IIC總線在傳送數(shù)據(jù)過程中共有三種類型信號:
它們分別是:開始信號、結(jié)束信號和應答信號。
7、FIQ中斷向量入口地址:
FIQ和IRQ是兩種不同類型的中斷,ARM為了支持這兩種不同的中斷,提供了對應的叫做FIQ和IRQ處理器模式(ARM有7種處理模式)。
FIQ的中斷向量地址在0x0000001C,而IRQ的在0x00000018。
8、SPI四種模式,簡述其中一種模式,畫出時序圖
面試驅(qū)動崗位,需要會畫其中一種方式。模式0或者模式3。畫出通信時序圖。
在芯片資料上極性和相位一般表示為CPOL(Clock POLarity)和CPHA(Clock PHAse), 極性和相位組合成4種工作模式。

spi四種模式SPI的相位(CPHA)和極性(CPOL)分別可以為0或1,對應的4種組合構(gòu)成了SPI的4種模式(mode)
Mode 0 CPOL=0, CPHA=0
Mode 1 CPOL=0, CPHA=1
Mode 2 CPOL=1, CPHA=0
Mode 3 CPOL=1, CPHA=1
時鐘極性CPOL: 即SPI空閑時,時鐘信號SCLK的電平(1:空閑時高電平; 0:空閑時低電平) 時鐘相位CPHA: 即SPI在SCLK第幾個邊沿開始采樣(0:第一個邊沿開始; 1:第二個邊沿開始)
sd卡的spi常用的是mode 0 和mode 3,這兩種模式的相同的地方是都在時鐘上升沿采樣傳輸數(shù)據(jù),區(qū)別這兩種方式的簡單方法就是看空閑時,時鐘的電平狀態(tài),低電平為mode 0 ,高電平為mode 3。
具體的通信過程請自行百度,2021年秋招大疆筆試題考了這道題。
第七章 雜項面試題
1、講一講馮諾依曼和哈佛體系的區(qū)別
哈佛結(jié)構(gòu)是一種將程序指令存儲和數(shù)據(jù)存儲分開的存儲器結(jié)構(gòu)。目前使用哈佛結(jié)構(gòu)的中央處理器和微控制器有很多,ARM9、ARM10和ARM11,51單片機屬于哈佛結(jié)構(gòu)。
馮·諾伊曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器結(jié)構(gòu)。
2、面向?qū)ο缶幊痰娜筇匦?/strong>
以及重載的意思。重載,是指允許存在多個同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個數(shù)不同,或許參數(shù)類型不同,或許兩者都不同)。
3、http默認端口號
80
4、linux中mysql數(shù)據(jù)庫默認的端口是
3306
5、編程習慣小知識點
C語言編程中,單片機平臺,一般有.c和.h文件,如果一個人在.h文件中定義了一個變量,會有什么后果。(討論編程習慣的問題,我一般是只在.h文件中聲明函數(shù),不會做變量定義;另外,編程中每一個模塊都會有對應的.c和.h文件,最終的總程序自己定義一個comm.c和comm.h去調(diào)用各個模塊,這樣的習慣我覺得還行)
if語句中如果是或運算( | ),第一個條件滿足時,第二個條件還會判斷嗎?;蜻\算的話,當然不會,因為 0|1=1,中斷了
對于代碼整潔方面,我已經(jīng)在我的技術(shù)交流群發(fā)了文件,推薦《代碼整潔之道》、《編碼:隱匿在計算機軟硬件背后的語言》、《程序員的自我修養(yǎng)》、《華為內(nèi)部代碼規(guī)范》