嵌入式开发调试学习与思考
生活随笔
收集整理的這篇文章主要介紹了
嵌入式开发调试学习与思考
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
截至今天,自己負責的一個項目算是告一段落,前前后后5個多月時間。
該項目是對公司設(shè)計的基于powerpc的處理器進行FPGA仿真階段的軟件驗證,以及bootloader和kernel移植,以便芯片進行投產(chǎn),主要完成的工作如下:
(1)調(diào)試環(huán)境的搭建
(2)處理器核功能驗證,如異常 cache TLB等
(3)bootloader以及kernel中處理器基本外設(shè)驅(qū)動調(diào)試,如USB SPI I2C MAC SDIO UART等,kernel最小系統(tǒng)啟動進控制臺。
由于該項目處于預(yù)研階段,并且FPGA仿真板數(shù)量不多,所以公司投入人力不大,只安排讓我來做這個項目。
對我來說,莫大榮幸有機會來獨立完成這樣一項軟硬件綜合調(diào)試(各種硬件問題搞得我都快要奔潰了)
由于FPGA板很久不用了不穩(wěn)定,加之各種硬件問題。折騰5個月的時間總算是將FPGA階段工作完成。
但是在最后階段USB調(diào)試通過,整個系統(tǒng)調(diào)試完成時,心里卻有一種悵然若失的感覺,畢業(yè)工作之后一直縈繞我腦中的一個問題:
嵌入式開發(fā)調(diào)試,最后我到底學到了什么?
工作至今三年有余,翻看自己的csdn博客發(fā)現(xiàn),剛工作時寫博客總結(jié),總是會關(guān)注一些具體代碼細節(jié),如C語言的變參宏定義 某個具體驅(qū)動的實現(xiàn)等。
工作2年后,更多的總結(jié)是一些有意思的代碼框架,以及自己對問題的見解,如kernel的時鐘機制,系統(tǒng)調(diào)用等。
這是一種進步。
但是今天我卻感覺,對于嵌入式開發(fā)調(diào)試,學到的最重要的東西并不是上述這些知識,而是積累下來的思路和經(jīng)驗。
記憶力是有限的,我之前有過這樣的疑惑:
做過一些項目,對于處理器及各種外設(shè)都接觸調(diào)試過,但是再次調(diào)試還是需要對其datasheet,涉及的specification,以及軟件代碼進行復(fù)習。
做過項目的一些調(diào)試,寫博客總結(jié)相關(guān)知識,但是一個月后,再看博客,跟看別人寫的一樣,頂多混過臉熟。
但是我卻發(fā)現(xiàn),雖然這樣,但是我再次調(diào)試,卻比第一次接觸時要從容很多。
但是我知道遇到問題,首先去排查哪個過程出錯,枚舉?class driver? 硬件是否正常,示波器測phy給出的clock是否正確,phy的狀態(tài)引腳是否正常。
實在不行,USB協(xié)議分析儀唄,抓下USB包,一個包一個包排查。
調(diào)試mac,TCp/IP協(xié)議我也只是臉熟,mac的datasheet我也得在熟悉下。
但是遇到問題,我知道首先確定phy自動協(xié)商完成了沒,再將mac以及dma寄存器全部打印出來對比,將dma descriptor queue打印出來,根據(jù)狀態(tài)描述符來查,懷疑硬件問題,可以采用mac以及phy的loopback模式來進行排除。總能將問題定位出來。
調(diào)試spi i2c uart,協(xié)議需要熟悉下。
但是遇到問題,spi 3根線,i2c 2根線,uart 4根線(調(diào)試串口,非全功能串口),示波器直接抓信號,對著協(xié)議和數(shù)據(jù)手冊查,一定能找出問題。
這些是在調(diào)試過程中積累下來的思路和經(jīng)驗,當然,工作3年初學者跟大牛的經(jīng)驗相比,還是有很長的路,需要努力學習。
但是卻說明了,工作中學習知識之外,更多的是對解決問題思路和經(jīng)驗的積累。
所以以后就不要糾結(jié)于知識的遺忘,而應(yīng)該注重解決問題思路的培養(yǎng)和經(jīng)驗的積累。
kerneler,不僅是為表明自己是內(nèi)核系統(tǒng)開發(fā)者,更多的是希望自己成為一個追求事物本質(zhì)的人!
該項目是對公司設(shè)計的基于powerpc的處理器進行FPGA仿真階段的軟件驗證,以及bootloader和kernel移植,以便芯片進行投產(chǎn),主要完成的工作如下:
(1)調(diào)試環(huán)境的搭建
(2)處理器核功能驗證,如異常 cache TLB等
(3)bootloader以及kernel中處理器基本外設(shè)驅(qū)動調(diào)試,如USB SPI I2C MAC SDIO UART等,kernel最小系統(tǒng)啟動進控制臺。
由于該項目處于預(yù)研階段,并且FPGA仿真板數(shù)量不多,所以公司投入人力不大,只安排讓我來做這個項目。
對我來說,莫大榮幸有機會來獨立完成這樣一項軟硬件綜合調(diào)試(各種硬件問題搞得我都快要奔潰了)
由于FPGA板很久不用了不穩(wěn)定,加之各種硬件問題。折騰5個月的時間總算是將FPGA階段工作完成。
但是在最后階段USB調(diào)試通過,整個系統(tǒng)調(diào)試完成時,心里卻有一種悵然若失的感覺,畢業(yè)工作之后一直縈繞我腦中的一個問題:
嵌入式開發(fā)調(diào)試,最后我到底學到了什么?
工作至今三年有余,翻看自己的csdn博客發(fā)現(xiàn),剛工作時寫博客總結(jié),總是會關(guān)注一些具體代碼細節(jié),如C語言的變參宏定義 某個具體驅(qū)動的實現(xiàn)等。
工作2年后,更多的總結(jié)是一些有意思的代碼框架,以及自己對問題的見解,如kernel的時鐘機制,系統(tǒng)調(diào)用等。
這是一種進步。
但是今天我卻感覺,對于嵌入式開發(fā)調(diào)試,學到的最重要的東西并不是上述這些知識,而是積累下來的思路和經(jīng)驗。
記憶力是有限的,我之前有過這樣的疑惑:
做過一些項目,對于處理器及各種外設(shè)都接觸調(diào)試過,但是再次調(diào)試還是需要對其datasheet,涉及的specification,以及軟件代碼進行復(fù)習。
做過項目的一些調(diào)試,寫博客總結(jié)相關(guān)知識,但是一個月后,再看博客,跟看別人寫的一樣,頂多混過臉熟。
但是我卻發(fā)現(xiàn),雖然這樣,但是我再次調(diào)試,卻比第一次接觸時要從容很多。
以最近兩星期進行的一些外設(shè)模塊調(diào)試為例。
但是我知道遇到問題,首先去排查哪個過程出錯,枚舉?class driver? 硬件是否正常,示波器測phy給出的clock是否正確,phy的狀態(tài)引腳是否正常。
實在不行,USB協(xié)議分析儀唄,抓下USB包,一個包一個包排查。
調(diào)試mac,TCp/IP協(xié)議我也只是臉熟,mac的datasheet我也得在熟悉下。
但是遇到問題,我知道首先確定phy自動協(xié)商完成了沒,再將mac以及dma寄存器全部打印出來對比,將dma descriptor queue打印出來,根據(jù)狀態(tài)描述符來查,懷疑硬件問題,可以采用mac以及phy的loopback模式來進行排除。總能將問題定位出來。
調(diào)試spi i2c uart,協(xié)議需要熟悉下。
但是遇到問題,spi 3根線,i2c 2根線,uart 4根線(調(diào)試串口,非全功能串口),示波器直接抓信號,對著協(xié)議和數(shù)據(jù)手冊查,一定能找出問題。
等等。。
各種奇奇怪怪的問題,總能找到解決方法。
現(xiàn)在遇到問題不會像剛工作時那樣手忙腳亂,因為我相信,各種調(diào)試工具,示波器,萬用表,邏輯分析儀,協(xié)議分析儀,抓信號,量電壓,軟硬件結(jié)合調(diào)試,總會找到問題所在!
這些是在調(diào)試過程中積累下來的思路和經(jīng)驗,當然,工作3年初學者跟大牛的經(jīng)驗相比,還是有很長的路,需要努力學習。
但是卻說明了,工作中學習知識之外,更多的是對解決問題思路和經(jīng)驗的積累。
所以以后就不要糾結(jié)于知識的遺忘,而應(yīng)該注重解決問題思路的培養(yǎng)和經(jīng)驗的積累。
kerneler,不僅是為表明自己是內(nèi)核系統(tǒng)開發(fā)者,更多的是希望自己成為一個追求事物本質(zhì)的人!
總結(jié)
以上是生活随笔為你收集整理的嵌入式开发调试学习与思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 串口的流控制
- 下一篇: 我要做一个什么样的程序员