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