目前消費類智能設備大多使用ARM處理器,比如手機,平板,電視等。但是有很多大學生對ARM還比較陌生,而是更熟悉8位單片機。但是不要泄氣,其實ARM的M系列處理器和其他單片機沒太大的區別,有51或者STM32基礎的學生上手起來較為容易。
當然,如果已經有了單片機和C語言基礎,想學ARM,那就直接上手就好了。買開發板,找資料盡可能詳盡的,可以移植操作系統的板子,要不然要想學系統移植和驅動就得重新買板子不劃算。建議從ARM從裸板開始,先了解ARM體系的結構(其中以ARM指令集為重點)。由于接觸過裸機編程,建議還是把模電的一些知識簡單回顧一下,把數電的知識回顧一下,給看芯片手冊和原理圖上的一些驅動電路夯實基礎。
再者,最重要也是最難的就是自己動手寫程序,解決問題。這個我建議還是先模仿寫代碼,然后理解,最后自己重寫。這個過程中主要還是在夯實之前接觸過的理論比如:GPIO的操作、GPIO口中斷、UART操作、IIC、SPI、CAN總線等。
至于操作系統的移植這一塊,我覺得對于新手起步并不容易,只有將ARM裸機各個模塊摸得較為熟悉之后,再上手,先看看Linux操作系統原理相關的書籍,了解了操作系統的組成,啟動流程,每個過程應該做哪些事情之后,再開始學習如何編譯配置BootLoader,先把BootLoader用起來,然后再說內核的編譯和配置,只有摸清楚配置內核、驅動、添加設備到設備樹等操作之后,再好好學學什么是文件系統,以及文件系統的制作,這個時候基本上就對操作系統有一個比較全面和深入的認知。
上面的內容搞定之后,再去做一些簡單的字符設備驅動的編寫,再到平臺設備驅動的話就好上手很多,如果不做驅動,把上面的內容好好學習,細化深入就可以了,基本上入門得2個月左右,想要搞得好一點,得知識和經驗的沉淀。
如果要深入去做驅動就得把并發編程、競態問題、IO模型、傳感器、常見字符設備、網絡設備、塊設備等相關問題進行深入研究,每個模塊都是較為復雜的,這個只有真正去做過,才會有一些經驗心得,總之,要想學明白就必須自己上手獨立自主的去做。要不然永遠無法入門。
也希望同學們可以早一點拿到自己心儀的板子,開啟自己的ARM學習,體會ARM裸機開發、系統移植、驅動開發的樂趣。