记一次解决问题的掉坑过程
這兩天在調試一個音頻ADC 芯片,也是之前的項目,但是一直調不出來,我發現我總是在這樣的問題上糾結很久,以前踩過的坑后面照樣會踩,只不過踩完會迅速把腳拉出來繼續前進,我經常聽到有人說「做嵌入式真的太容易了,來來去去就那點東西」。
不是小瞧,做嵌入式真的就來來去去那點東西,我們前幾天調試一個屏幕,剛開始也是怎么點也點不亮,屏幕的分辨率是1920*1200,但是我們把這個分辨率軟件設置好燒錄開機后,內核崩潰了。
調試驅動不像寫應用程序,如果應用程序崩潰了,系統還是活的,系統活著,就可以繼續搞事情,繼續看系統拋出來的信息調試。驅動不一樣,驅動是內核的一部分,而且是內核的很大一部分,如果驅動異常了,很大可能性會影響到內核。
提個題外話「為什么內核下面那么多用不著的驅動代碼不直接刪除掉?」
再提個問題「為什么明明可以在內核里面找到答案,大家還是習慣百度?google?」
應用是人身體上的衣服,是帽子,是鞋子,但是驅動不一樣,它是人身上的手,是腳,是鼻子,是耳朵。
——轉回來
針對上面的問題,我們就查呀查,最后發現MTK 的代碼里面有問題。
—— 這個問題出現的情況是
如果我們軟件設置1920*1080的分辨率的話,內核是不會崩潰的,但是我們寫入1920*1200的分辨率的話,內核就崩潰了。
我們想「是不是因為增大了分辨率,但是默認的buff 空間沒有那么大,這樣使用的虛擬內存就越界了,然后就崩潰了?」
然后我們就找這部分的信息,你們知道,內核代碼是一些非常困難的代碼,閱讀代碼的時候,有時候要猜測它的行為,閱讀一份完全陌生的代碼,而且你還不知道它的行為意圖,這是很困難的。
— — 然后怎么辦?
然后我們就正向分析了,找到崩潰的位置,然后注釋它,對,你看的沒有錯,我們注釋了看不懂的那段代碼,就是這個操作讓我們的系統正常開機,而且能夠正常顯示畫面。
然后復盤的時候,我們咨詢了MTK 的技術開發,他們給出的解釋是「出問題的這段代碼只是為了在eng 版本調試」,這還沒有完,我們雖然知道這樣修改可以,但是還是看不懂它的這個函數有什么調試的意義所在。
韋老師好像有一個名言,說20%的時候在寫代碼,80%的時間在調試代碼。調試要花費的功夫確實比寫代碼多,搞嵌入式,因為涉及硬件,如果有一個東西被卡住了,那時候的感覺,那個焦急的心都快孳出來了,所以搞技術,沒有一個好的心態是不行的,畢竟它不是砍樹,也不是真的搬水泥或者搬磚。
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的记一次解决问题的掉坑过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IAR6.3的安装
- 下一篇: 高斯克吕格投影知识总结