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