好多準畢業生即將踏上作業崗位,但仍然對自己需要學習的能力及作業規劃充滿困惑,扒了個過來人的經驗看一看:
1 學習51單片機,只要求實作功能,不求甚解。但建議能夠提出問題,比如“為什么往IO控制暫存器寫入特定值能點亮LED燈?”“IO口的電路結構是什么樣子的?”“什么是上拉下啦,灌電流拉電流?”,這一階段主要是熟悉單片機的使用,并且在使用中思考發現問題,還能熟悉一些基本概念。
2 開始查資料看書,看模擬電路數字電路等等,開始去弄明白1中所提出的問題。這時候問題主要集中在電路方面。
3 開始學習STM32,隨便買個板子,看原子的書跟著一步步去做。這時候你會遇到很多計算機方面的問題,這時候一邊學習教程,一邊學習:微機原理,編譯原理,作業系統。你要弄清楚ARM架構,弄明白CPU如何取指,譯碼,執行,知道地址總線,控制總線,資料總線如何作業。要弄明白你編譯各個階段產生的各個檔案是什么,什么是分散加載,什么是重定位,什么是代碼段,什么是資料段,等等。還要能弄明白CPU如何啟動,程式鏡像在記憶體中如何布局。要知道中斷的原理,以及現場保護等等。最后你了解了各個知識點之后,轉向GCC開發STM32,這時候你如果知識掌握得不錯,你應該可以很快地學會撰寫聯結器腳本并且明白每一條陳述句所代表的含義。
4 開始增強C語言,深入挖掘C語言的各個死角。最好可以做到當你寫下一條陳述句的時候知道編譯器會如何處理。還需要資料結構和軟體工程,建議最好還要學習一下設計模式。開始學習養成良好的代碼風格,開始思考代碼的結構。可以說設計模式如果能學好,在往后學習LINUX內核時大有裨益。你會發現LINUX的輸入子系統有點像職責鏈模式,會發現ASOC音頻系統有點像模板方法模式。私以為,如果能在兩個以上不同方面考察同一種編程思想,你會得到更加深刻的理解,更能領會其精華。
5 認真研讀OS方面的書,各個知識點都要弄明白,行程是什么程式是什么執行緒是什么,競爭死鎖優先級反轉,虛擬地址空間物理地址空間,用戶空間內核空間等等。開始學習ucos,這個沒什么可說的,如果在2中能熟練掌握各種知識點,知道CPU如何中斷如何保護恢復現場,那么讀ucos的原始碼時候,在原理上就不會有什么疑惑。如果能在4中養成把握代碼整體結構的能力并且學習好資料結構和基本的演算法,讀原始碼就沒有什么障礙。一旦原理弄通了,原始碼也能讀懂,那么吃透ucos就是順理成章的事情。
6 自己仿照ucos寫一個stm32上的實時os出來。
7 進軍LINUX。學習LINUX的基本使用,看趙炯那本內核剖析,啃LINUX內核設計與實作,把握總體的內核架構。之后可以學習驅動,看建議陳學松老師的書,弄明白基本的驅動架構和如何撰寫簡單的驅動,認真對待,這里強調一下設備驅動模型。最后啃LINUX內核原始碼情景分析,上下兩冊用心讀,這里著重強調一下內核中的VFS部分。之后就是看宋寶華老師的書,進一步學習驅動開發。最后。。。。。。。看內核原始碼看內核原始碼看內核原始碼。
8 其它的什么SPI,IIC,什么DMA,都只是技能問題,只要知識學的好,技能想咋點就咋點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/29048.html
標籤:非技術區
上一篇:雙向藍牙
下一篇:Proteus-串口到LED
