c语言编译机器码,[转载]单片机C语言到机器码的全过程
我們平時做單片機(jī)編程,最常使用的是C語言和匯編語言兩種,但是最終下載到單片機(jī)內(nèi)部的,卻是HEX文件里的二進(jìn)制機(jī)器代碼,很多同學(xué)不懂這個過程是如何轉(zhuǎn)換的。
我們的程序開發(fā)環(huán)境,比如KEIL和偉福等等,都是可以使用C或者匯編語言來編程的。對于C語言來講,一旦我們編程完畢,就可以點(diǎn)擊編譯,編譯的過程,實際上首先通過
“編譯器”將C語言翻譯成匯編語言,再通過“匯編器”將匯編語言轉(zhuǎn)化成機(jī)器代碼,最終可以下載到單片機(jī)中的是機(jī)器代碼。
細(xì)心的同學(xué)能夠看出,我寫的“C到匯編”,是“翻譯”,"匯編到機(jī)器代碼",是“轉(zhuǎn)化”。對于編譯器來講,將C轉(zhuǎn)化成匯編的時候,不是一一對應(yīng)的關(guān)系,也就是說幾行C代碼,可能翻譯成幾十行。而匯編語言和機(jī)器代碼,從某種意義來講,是一個東西,兩者是一一對應(yīng)的關(guān)系。因此,如果我們直接使用匯編語言寫的程序,就可以直接跳過“編譯器”,通過匯編器將我們寫的匯編語言轉(zhuǎn)化成機(jī)器代碼。
我們早期的程序員,大多使用匯編代碼。通常程序員自己寫的匯編代碼,比編譯器轉(zhuǎn)化的匯編代碼效率要高,執(zhí)行速度快,占用空間也小。隨著高級語言的誕生,CPU速度的提升和程序存儲空間的不斷增大,我們開始使用高級語言C來編寫程序代碼。C語言開發(fā)的優(yōu)勢在于開發(fā)方便,移植容易,可維護(hù)性強(qiáng),有類似的項目,直接移植過來,不需要重復(fù)開發(fā)了。
但是這并不意味著匯編代碼被淘汰了,匯編語言的意義,更重要在于可以通過匯編語言,可以清楚的理解CPU內(nèi)部的結(jié)構(gòu)及其程序運(yùn)行模式。熟練掌握匯編語言對于今后學(xué)習(xí)深入的嵌入式操作系統(tǒng)非常有好處。
因此我建議:作為初學(xué)者在學(xué)習(xí)單片機(jī)技術(shù)的過程中,如果想要上手快,迅速學(xué)會做點(diǎn)簡單的東西,可以直接用C來編程。如果你想深入學(xué)習(xí)軟硬件開發(fā),將來深入的硬件底層學(xué)習(xí),成為這個行業(yè)的高手,基礎(chǔ)打牢固點(diǎn),建議先用匯編做兩年,對于你今后的成長非常有用的。
你的師兄們沒說錯,你應(yīng)該用C,簡單來說:
1. C上手快,因為比匯編更符合我們的思維方式對吧
2. C比匯編容易駕馭,一旦程序開始變得復(fù)雜了,C程序相對容易維護(hù)的優(yōu)勢會非常明顯
3. 標(biāo)準(zhǔn)C是“跨片子”的,匯編指令則根據(jù)不同的片子可能會不一樣
4.
現(xiàn)代的C編譯器非常智能,你手寫的匯編代碼很難超過它生成的(除非,你是非常NB的老手),因為編譯器一般比你更“懂”CPU的結(jié)構(gòu),更知道應(yīng)該生成什么樣的指令。
5.你團(tuán)隊(或是身邊的人,如師兄)的人都用C的時候,你想問別人問題,你應(yīng)該遷就他們,而不是他們遷就你。
所以,不需要迷茫啦,看上面你就知道,其實C不難掌握,你擔(dān)心什么呢,花幾個星期時間就好啦。
當(dāng)然小宋老師說的很對。你有時間的話,深入地掌握一種匯編也是有益無害的,多一種知識就能多一份解決問題的能力。學(xué)匯編能讓你理解你用的片子,同樣會提高你對C的理解的。對提高開發(fā)能力有益無害。
至于說,深不深入學(xué)51,則是仁者見仁的問題,要換我,我會建議你,深入掌握一種51核的MCU,將常用的片內(nèi)外設(shè)的用法(包括電路連接和編程)都弄懂,就好了。
花時候?qū)W類似的片子,不如學(xué)算法、學(xué)數(shù)學(xué)、學(xué)電路、學(xué)點(diǎn)數(shù)字信號處理,學(xué)點(diǎn)操作系統(tǒng)知識,HIAHIA
總之就是不建議你把時間花在有量變沒質(zhì)變的事情上
學(xué)了51,再往前,你可以花時間弄RTOS,使用帶操作系統(tǒng)ARM開發(fā),或是學(xué)習(xí)DSP芯片的開發(fā),或是學(xué)FPGA,總之,學(xué)習(xí)那些能給你帶來新思維方式的技能,而不是總停留在一個層面上跑圈圈。
總結(jié)
以上是生活随笔為你收集整理的c语言编译机器码,[转载]单片机C语言到机器码的全过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux网站爬取,Kali下httra
- 下一篇: visual c 语言参考手册pdf,