|
C與匯編:
C:經(jīng)編譯后,成匯編。
匯編:是自己“完成”了C的工作。
C:是從通用化出發(fā)的,考慮了單片機(jī)的特點(diǎn),極大地減少了人為的錯(cuò)誤與不合理。
匯編:因人為異,有許多技巧是C無法做到的,所以匯編更靈活,不過這建立在精通的基礎(chǔ)上。匯編稍有不小心就會(huì)出錯(cuò),要命的是:不易察覺。
C:由于通用,C只能按部就班,因此程序長(zhǎng),重復(fù)多,運(yùn)行時(shí)間多。
匯編:因靈活程序方式,可以節(jié)省內(nèi)存,節(jié)省運(yùn)行時(shí)間。
通常,匯編程序會(huì)比C少用內(nèi)存及時(shí)間在30%以上。但大多數(shù)情況下,內(nèi)存現(xiàn)在不是問題了,時(shí)間也不會(huì)太緊。所以節(jié)省內(nèi)存與時(shí)間的意義不大,但也有特例。
說明一下:
C是用堆棧傳遞參數(shù)的,但每次參數(shù)要彈出壓入,所以傳遞時(shí)有多花一點(diǎn)時(shí)間。匯編傳遞參數(shù)直接到達(dá)目標(biāo),快多了。
C一個(gè)子程序一個(gè)包。而匯編的一個(gè)子程序可以切入跳轉(zhuǎn)另一個(gè)子程序中,以節(jié)省內(nèi)存。
特別的一個(gè)實(shí)例:時(shí)間內(nèi)存要求高的項(xiàng)目(前提:用51單片機(jī)):
16*64的LED點(diǎn)陣顯示 + 14個(gè)LED數(shù)碼管顯示 + 中文漢字顯示處理 + 無線收發(fā) + 生產(chǎn)記錄(計(jì)劃、產(chǎn)能、次品、待產(chǎn))+ 年月日精確時(shí)間(普通晶振,日差小于一秒)。
單就解決顯示的掃描閃動(dòng)(驅(qū)動(dòng)顯示1136個(gè)LED段,不得不分8次掃描,1136個(gè)點(diǎn)時(shí)刻會(huì)變,要占的內(nèi)存多,顯示處理時(shí)間多),程序運(yùn)行需要時(shí)間(漢字解碼+無線通訊+時(shí)鐘+掃鍵……)。
解決掃描顯示的閃眼與程序任務(wù)多,在時(shí)間上的矛盾尤其特出,必須精心策化。這時(shí)用C來策化就捉襟見肘了,因?yàn)镃本來就耗時(shí)。
C的優(yōu)勢(shì):
1、用匯編需用很強(qiáng)的優(yōu)化寄存器及內(nèi)存的能力,用C的好處是,不需要你去考慮這些復(fù)雜的問題,使得編程簡(jiǎn)單。
2、 C出錯(cuò)的機(jī)率遠(yuǎn)小于匯編,匯編稍有不小心就會(huì)出錯(cuò),要命的是:不易察覺。
3、 C有團(tuán)體合作的優(yōu)勢(shì), 這是 C的特點(diǎn),便于交流。如果是匯編,很難與他人交流。
4、 對(duì)于運(yùn)算程序, C已有前輩們做好了運(yùn)算庫(kù),很難想像一般人能用匯編去:開方、三角函數(shù)(當(dāng)然,也可以讓C先編譯,再做成匯編的庫(kù))。
5、 C 有龐大的公用程序庫(kù)(子程序),這對(duì)于程序量大的程序更有優(yōu)勢(shì)。匯編的程序庫(kù)多為個(gè)人積累,很難得到。
其實(shí)C只有一個(gè)優(yōu)點(diǎn)!看一下單片機(jī)程序結(jié)構(gòu)就明白了:
單片機(jī)程序通常結(jié)構(gòu):1硬件初始化、2軟件參數(shù)初始化(含內(nèi)存安排)、3主程序(事件處理)、4中斷程序。
匯編:以上一切由你處理,除非你已獲得了很多相關(guān)的匯編數(shù)據(jù)庫(kù)。
C:在你未寫程序之前已為你做了什么?
1、硬件初始化,C僅能做很少的部分。(注:這就是為什么在做硬件時(shí)你總是要一行行慢慢寫的原因,與匯編比幾乎沒有優(yōu)勢(shì))
2、軟件參數(shù)初始化(含內(nèi)存安排),C完成其中的大部分,你定義一下就OK了,不用就煩放在哪里,也不會(huì)錯(cuò),錯(cuò)了報(bào)警重來。(注:比匯編操心少啊)
3、主程序(事件處理),C有大量的庫(kù)函數(shù)可以調(diào)用,可以減少你大部分工作量。(注:比匯編操心少啊)
4、中斷程序。調(diào)用庫(kù)的機(jī)會(huì)不多(注:本人不建議在中斷中完成事件處理,而建議盡最大可能只在中斷中做一些事件標(biāo)志!而讓事件在主程序中依標(biāo)志進(jìn)行處理,因?yàn)橹袛嘤袃?yōu)先權(quán),處理事件往往需要的時(shí)間多,會(huì)耽誤其它事件的處理,如這時(shí)按鍵就會(huì)偽“失靈”)。
可見 C的這個(gè)優(yōu)點(diǎn)是,C能幫你完成程序中的很大一部分工作。(其實(shí)是你調(diào)用了前輩們已做好的工作,這此工作是:編譯器所做的、程序庫(kù)所做的)
道理很簡(jiǎn)單:一件事能用工具設(shè)備完成的盡量用,無法用時(shí)用人工。C就是寫單片機(jī)程序的一個(gè)極好的“工具設(shè)備”。
用C的風(fēng)險(xiǎn)在哪里?
一個(gè)程序什么都OK了,就缺一些庫(kù)文件!找又找不到。
如果你會(huì)匯編,就可以自己做這個(gè)找不到的這個(gè)庫(kù)。
總之C適合大多數(shù)的人,匯編僅適用很少的一部分人,但用匯編寫程序的人,一定是高手,否則他駕馭不了單片機(jī)。
做匯編需要徹底地了解單片機(jī),做C無需要了解到很底層。而要精通單片機(jī),匯編又是最佳手段。
個(gè)人建議:所有學(xué)單片機(jī)的同學(xué)學(xué)C,C是在大勢(shì)所趨,也適合絕大多數(shù)人。特別是團(tuán)體作戰(zhàn),未來不是單打獨(dú)斗的年代!
也建議那些想精通單片機(jī)的同學(xué),學(xué)好匯編,匯編天馬行空,不受庫(kù)存文件、頭文件限制,不受C的規(guī)矩。當(dāng)然不能放棄C。
一但學(xué)好了匯編,你再打開你的C編譯后的匯編看看,這時(shí)就知道缺點(diǎn)在那里,就能提高自己C語言的水平。也能輕松掌握C當(dāng)中繞人的難點(diǎn)。
|
評(píng)分
-
查看全部評(píng)分
|