1. 程式人生 > >MTK如此面試,你能答對多少

MTK如此面試,你能答對多少

1:MTK方案中的匯流排工作原理是什麼?
MTK採用的是ARM核,他主要用來進行管理各個模組,其中多媒體如視訊這些都是用了DSP的,DSP與ARM間有相互通訊的。而ARM他分為AHB部線和APB匯流排。這兩個匯流排是不同的。AHB主要用來控制高速的東西如MEMORY DMA等,而APB就是來控制外設的。如IIC,KEY,GPIO等。而APB與AHB中間有一個APB橋。這個APB橋就是用來做高低速轉換。

2:按鍵的處理過程,從中斷檢測到MMI的一系列過程。
這個就更簡單了。MTK的按鍵實際上就是用COL來做檢測的,如果有人做過無擴充套件IC的全鍵盤,會很清楚。只要發現有一個COL上有電平的變化,就會生產一箇中斷,併發一個事件訊息給KEY TASK,然後經過讀暫存器,最後就得到對應的按鍵,這個按鍵放到一個環形的BUG裡,然後就發一個訊息出去,這個消自己只是通知MMI來讀環裡按鍵(當然發這個訊息時有判斷的不要問我,你可以看程式碼)。MMI讀到後就會做一個轉換。實際上就是將驅動層的按鍵重新對映一下。這個為什麼要這樣做,就是為了方便,將MMI與驅動層分開,有點軟體常識的都知道。我不解答。什麼長按,短按。重複按,,都是通過定時器來完成的。


3:CAMERA的工作原理
CAMERA從硬體上說起,他有VSYN HSYN MCLK 還有PCLK,這幾個訊號分別是MCLK是一個BB給CAM工作的時鐘,大家都知道所有的DSP都要是基於時鐘來執行的,這個就是他的基本時鐘,內部很多的時鐘都是通過這個時鐘進行分頻或倍頻得到的。VSYN是一場的同步。HSYN是一行的同步。PCLK是一個點一個時鐘,這個是用來與基帶抓資料同步的。這裡的行,場如果你不明白,你可以看黑白電視機原理。打字太麻煩,如果要解釋,我們可以電話或其它的方式聊。CAM分為Preview與Capture。在Preview時CAM輸出為YUV的格式,然後經過RGB的轉換,並將此資料存到到一個BUF裡,這個BUF也就是我們做MMI都知道的LAYER,然後與OSD的LAYER進行疊加,當然什麼時候刷,這就是前面提到的VSYN了,這樣就可以知道了,為什麼我們的刷屏速度是會影響我們的preview的速率了.資料是怎麼抓到BB上來的,這個就是MTK上說的ISP了.ISP後還要進行一個RESIZE,這個東西就是會將他RESIZE到我們想要的尺寸.RESIZE的資料才是放到LAYER BUF裡的資料.這打字太麻煩了,簡單的說一下Capture吧,他實際上就是MMI通知驅動層,我現在要一張多大的image.怎麼通知的,就是MMI通過訊息帶下來的引數,如照片大小.還有照片格式.等一些引數.實際上在如果設定下來的圖片大小與現在正在Preview的大小一樣的情況下,就會將最後一個Preview的幀進行編碼然後以檔案的形式存起來.如果實際要的圖片SIZE與PREVIEW的不同時,這時他會將PREVIEW的最後一幀後的一幀進行RESIZE得到合適的SIZE後,就進行編碼,並以檔案的形式儲存下來.
還有一點就是VSYN與HSYN是會讓BB產生中斷的.自己看程式碼就能懂了,還有進CAM時會丟掉幾幀.

4:PWM的原理,MTK哪裡用到了PWM,為什麼要用PWM?
看來不能太細了,,簡單點
PWM的原理:這個東西在MTK裡面就是一種頻率不變的情況下佔空比變化.佔空比我不解釋了..懂點的都知道.
MTK哪裡用到了PWM:用得最多的就是屏的背光.還有按鍵燈.等
為什麼要用PWM:這個就是看原理就知道了..還是佔空比的事.

5:時鐘訊號的原理
MTK的時鐘外面能看得到的有32K(32.768K)和26M(或13M).32K最先起來.然後開始執行,啟動26M.26M經過內部的分頻和倍頻就得到了各種需要的頻率.看一下這個(26*4=104).其它的不說了..為什麼是用32.768這個可以算得出來的,為的就是RTC,RTC是幹什麼的,大家都知道. 還有我們的手機與基站的同步時鐘也是分頻出來的. 大家注意一下26M不是總在工作的,進入SLEEP後為了省電就會停掉,這時由32K來工作,當然32K就沒有停過.26M也不會在SLEEP後總是停掉的,他會過一段時間工作一下.這樣為了省電,而又不會丟掉別人打過來的電話.而如果你想測量一個26M怎麼搞呢?他工作一下,停一下,你如果開啟MP3或MP4,他就一直有26M出來了,為什麼呢?因為這個26M也是DSP的基時鐘,也就是上面我說過的DSP是用來做多媒體運算的.沒有時鐘指令就會跑不起來,數位電路都得有時鐘這一說.

6:I2C匯流排的用處,什麼時候需要用I2C匯流排
這東西太簡單了,我還有點不想說..不就是一個START一個STOP一個ACK嘛,,簡單得不能在簡單.他可以根據器件地址進行通訊..當年在學校時看了很多這資料..
什麼時候需要用I2C匯流排:這個還問,你的器件是IIC的器件,我就得用IIC匯流排..這個太簡單了,,你還是下次不要問了,你要問就問點具體的,一個起始訊號是什麼樣子的,STOP是什麼樣子的,具體畫一下,ACK是什麼時候才出現的,ACK起到什麼作用.

7:USB  UART  JTAG各式什麼,燒程式的工作原理。
我只說一下JTAG,哪些USB,UART我就不說了,大家都天天在用,不說了
JTAG是ARM公司用來除錯ARM核的一個協議.
燒程式的工作原理:MTK內部有ROM的,大家都知道.他有一個內部程式碼在開機時監視UART上接收到的資料,然後決定執行ROM的程式碼還是進入下載BIN的模式.

8:充電的過程是怎麼樣的?
充電.做過雙電池的人都知道,我做過,我知道,哈哈
當電池電壓很低時會進入預充,這時電流很少..後面的就是恆流恆壓,還有最後就是為了保護電池,他在幾個小時內沒有充滿也會停掉,有錯誤提示的.所以大家就不要怕你的電池充爆的事.

9:名詞解釋:回撥函式
   以及用處,什麼時候執行?

回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用為呼叫它所指向的函式時,我們就說這是回撥函式。回撥函式不是由該函式的實現方直接呼叫,而是在特定的事件或條件發生時由另外的一方呼叫的,用於對該事件或條件進行響應。

10:ASSETR是什麼?什麼情況下需要用
提示你的程式碼在錯誤的情況執行了.在你認為正常情況下不可能執行到的地方就得放這東西..這東西寫程式碼的人要記得經常用,多用.沒了

11:TYPEDEF的用法
用來宣告自定義資料型別,主要是為了達到簡便,還有就是在換編譯環境時這東西比較有用.因為不同的編譯環境資料型別佔的位數有可能不一樣的.

12:MTK程式中的REG是存放在哪裡的?
RAM中,通過RAM的地址內容,可以找到對應的REG的地址,找到了REG的地址就可以對REG進行操作

13:全域性變數,區域性變數,靜態區域性變數各是存放在哪個位置?
全域性變數靜態區域性變數: 存放在靜態RAM中.
區域性變數:存放在動態區.而這東西在函式呼叫時會壓棧的.他可能這一次執行存放在一個地址,下一次執行時就在另一個地址了,是一個不固定的.寫過彙編的都知道.

15:大小端模式是什麼?MTK才用了哪種模式?
就是高位存高位,低位存低位,或者就是高位存低位,低位存高位.MTK好像是小端.

16:MTK的程式架構是什麼?你有什麼建議改進?
基於時實作業系統來管理.用MAKEFILE來管理編譯.分為驅動層中間層和MMI層.
沒有什麼好的建議,個人感覺不錯,我寫程式碼都是按他們的風格來寫的,,很好管理.

17:音訊 視訊 播放原理。
音訊 視訊 播放原理
這個東西我回答不了,我覺得你也回答不了,不信你自己回答..你回答我問.看你能回答出來不.

18:如何新增語言,包括字型檔
這個做MMI的第一步..做過MMI的人都知道.

19: MTK晶片裡有CACHE嗎?有片內ROM嗎?有片內SRAM嗎?
都有

如果有,各自存放什麼?有什麼作用?晶片工作中具體如何使用
CACHE 在短時間內多次得復執行相同的程式碼時這樣可以加快速度.
片內ROM:開始上面說了,不回答了
片內SRAM:將重要的,對時間要求高的放在這裡面..編譯時有說明的..


20:以下兩種寫法有什麼不同?對引起的後果進行分析
A:
void Set_CMPDN_Low(void)
{
    GPIO_WriteIO(0, gpio_camera_cmpdn_pin);
}

B:
#define Set_CMPDN_Low()   GPIO_WriteIO(0, gpio_camera_cmpdn_pin)

A:就是省空間.但是速度慢.
B:就是浪費空間,但是速度快.