這是一個艱難并且枯燥的過程,除非你本身對其有很大的興趣,能以此為樂。
對于新人來說,可以先知其然而不知其所以然,知道單片既可以完成哪些功能,如何建立工程,如何調(diào)試,各個模塊之間如何協(xié)同工作,仿真器調(diào)試通過的代碼怎么放到真機上運行等等,總之實現(xiàn)一些簡單功能鼓勵一下自己。
然后就該安靜地想想了,這一切的背后有什么關(guān)聯(lián),為什么51匯編的第一句話是ORG 00H, JMP 30H(大致是這個意思,9年沒寫過51的程序了),為什么每個中斷的服務(wù)入口要寫在規(guī)定的位置,你可以似懂非懂,但是如果你想了就說明你已經(jīng)不滿足于現(xiàn)狀了。
再之后你可以進一步考慮一個實際的產(chǎn)品該如何設(shè)計,怎么樣把各個模塊有機地結(jié)合到一起,完成你想要的功能,這時候你應(yīng)該想到更多的問題,為什么裸機代碼中不包含那個死循環(huán)就沒法正常工作,操作系統(tǒng)中會有死循環(huán)嗎?現(xiàn)在也沒必要搞清楚,但是要有疑問。
再然后你會遇到很多bug,如果你寫匯編會發(fā)現(xiàn)代碼上了上千行之后連自己都不認識了,如果你寫c就覺得自己很啰嗦,該是時候考慮模塊化設(shè)計以及復(fù)用重入等問題了,好的代碼就是用最少的代碼實現(xiàn)功能,代碼越少出問題的幾率越小,在保證健壯和功能的前提下。
之后你就要考慮選擇方向,應(yīng)用,驅(qū)動,bsp還是更深層次的架構(gòu),到了這種層次,對計算機體系結(jié)構(gòu)的理解將是你巨大的優(yōu)勢,再輔以編譯原理,操作系統(tǒng)原理什么的,至少養(yǎng)活一家老小沒有問題。
再之后的發(fā)展全憑個人興趣愛好,不斷地閱讀和學(xué)習(xí)才會有更高的技術(shù)水平,如果喜歡還可以轉(zhuǎn)向管理。
最后討論一下樓主的第一條,不是cpu使用c語言,而是開發(fā)工具選擇了c語言,最終都要經(jīng)過編譯鏈接的過程轉(zhuǎn)為機器碼,因為對于cpu來說,它只認識機器碼,即使是匯編,都只不過是對機器碼的一種助記符。