找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3253|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

C語言和匯編語言在單片機(jī)開發(fā)中,各有什么優(yōu)缺點(diǎn)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:645244 發(fā)表于 2019-11-19 18:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
新手,求教謝謝大佬們

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:263427 發(fā)表于 2019-11-19 20:04 | 只看該作者
您好,兩個(gè)語言的區(qū)別如下:
匯編語言是一種用文字助記符來表示機(jī)器指令的符號(hào)語言,是最接近機(jī)器碼的一種語言。其主要優(yōu)點(diǎn)是占用資源少、程序執(zhí)行效率高。但是不同的CPU,其匯編語言可能有所差異,所以不易移植。
C語言是一種結(jié)構(gòu)化的高級(jí)語言。其優(yōu)點(diǎn)是可讀性好,移植容易,是普遍使用的一種計(jì)算機(jī)語言。缺點(diǎn)是占用資源較多,執(zhí)行效率沒有匯編高。

在實(shí)際開發(fā)中,現(xiàn)在基本都是用c語言,支持比較好。其次匯編比較難,新手入門比較困難。我的建議是先用c語言,等到后期了可以了解一下匯編,因?yàn)樽鰡?dòng)代碼的時(shí)候還的用。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

板凳
ID:263427 發(fā)表于 2019-11-19 21:47 | 只看該作者
您好,下面這個(gè)是我從論壇里面找出來的精華帖。你可以參考參考。

C與匯編:

C:經(jīng)編譯后,成匯編。
匯編:是自己“完成”了C的工作。

C:是從通用化出發(fā)的,考慮了單片機(jī)的特點(diǎn),極大地減少了人為的錯(cuò)誤與不合理。
匯編:因人為異,有許多技巧是C無法做到的,所以匯編更靈活,不過這建立在精通的基礎(chǔ)上。匯編稍有不小心就會(huì)出錯(cuò),要命的是:不易察覺。

C:由于通用,C只能按部就班,因此程序長,重復(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)勢:
1、用匯編需用很強(qiáng)的優(yōu)化寄存器及內(nèi)存的能力,用C的好處是,不需要你去考慮這些復(fù)雜的問題,使得編程簡單。
2、 C出錯(cuò)的機(jī)率遠(yuǎn)小于匯編,匯編稍有不小心就會(huì)出錯(cuò),要命的是:不易察覺。
3、 C有團(tuán)體合作的優(yōu)勢, 這是 C的特點(diǎn),便于交流。如果是匯編,很難與他人交流。
4、 對于運(yùn)算程序, C已有前輩們做好了運(yùn)算庫,很難想像一般人能用匯編去:開方、三角函數(shù)(當(dāng)然,也可以讓C先編譯,再做成匯編的庫)。
5、 C 有龐大的公用程序庫(子程序),這對于程序量大的程序更有優(yōu)勢。匯編的程序庫多為個(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ù)庫。
C:在你未寫程序之前已為你做了什么?
1、硬件初始化,C僅能做很少的部分。(注:這就是為什么在做硬件時(shí)你總是要一行行慢慢寫的原因,與匯編比幾乎沒有優(yōu)勢)
2、軟件參數(shù)初始化(含內(nèi)存安排),C完成其中的大部分,你定義一下就OK了,不用就煩放在哪里,也不會(huì)錯(cuò),錯(cuò)了報(bào)警重來。(注:比匯編操心少啊)
3、主程序(事件處理),C有大量的庫函數(shù)可以調(diào)用,可以減少你大部分工作量。(注:比匯編操心少。
4、中斷程序。調(diào)用庫的機(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)用了前輩們已做好的工作,這此工作是:編譯器所做的、程序庫所做的)

道理很簡單:一件事能用工具設(shè)備完成的盡量用,無法用時(shí)用人工。C就是寫單片機(jī)程序的一個(gè)極好的“工具設(shè)備”。

用C的風(fēng)險(xiǎn)在哪里?
一個(gè)程序什么都OK了,就缺一些庫文件!找又找不到。
如果你會(huì)匯編,就可以自己做這個(gè)找不到的這個(gè)庫。

總之C適合大多數(shù)的人,匯編僅適用很少的一部分人,但用匯編寫程序的人,一定是高手,否則他駕馭不了單片機(jī)。
做匯編需要徹底地了解單片機(jī),做C無需要了解到很底層。而要精通單片機(jī),匯編又是最佳手段。

個(gè)人建議:所有學(xué)單片機(jī)的同學(xué)學(xué)C,C是在大勢所趨,也適合絕大多數(shù)人。特別是團(tuán)體作戰(zhàn),未來不是單打獨(dú)斗的年代!
也建議那些想精通單片機(jī)的同學(xué),學(xué)好匯編,匯編天馬行空,不受庫存文件、頭文件限制,不受C的規(guī)矩。當(dāng)然不能放棄C。

一但學(xué)好了匯編,你再打開你的C編譯后的匯編看看,這時(shí)就知道缺點(diǎn)在那里,就能提高自己C語言的水平。也能輕松掌握C當(dāng)中繞人的難點(diǎn)。
回復(fù)

使用道具 舉報(bào)

地板
ID:637250 發(fā)表于 2019-11-19 22:59 | 只看該作者
C語言的優(yōu)點(diǎn):適用范圍廣,可移植性強(qiáng),開發(fā)周期短。
缺點(diǎn):比匯編語言的執(zhí)行效率低
匯編的優(yōu)點(diǎn):執(zhí)行效率高,能夠?qū)PU中的寄存器直接操作,直接作用于單片機(jī)的硬件環(huán)境,控制直接,精準(zhǔn),所以要精確控制,時(shí)序特別嚴(yán)格的要用匯編語言。
缺點(diǎn):過分依賴硬件,適用范圍窄,不同的機(jī)器對應(yīng)不同的匯編指令,開發(fā)周期短,可移植性差,開發(fā)周期長。
C語言簡單易懂,匯編有c的基礎(chǔ)好學(xué)一些,個(gè)人認(rèn)為小白先學(xué)c語言
回復(fù)

使用道具 舉報(bào)

5#
ID:525068 發(fā)表于 2019-11-22 00:24 | 只看該作者
C語言入門簡單易上手,比匯編容易
回復(fù)

使用道具 舉報(bào)

6#
ID:625113 發(fā)表于 2019-11-23 11:02 來自手機(jī) | 只看該作者
匯編語言執(zhí)行效率會(huì)高一點(diǎn),但是相對C語言會(huì)難學(xué)一點(diǎn)
回復(fù)

使用道具 舉報(bào)

7#
ID:398709 發(fā)表于 2019-11-23 15:57 | 只看該作者
簡單來說就是C語言更容易看,匯編運(yùn)行效率更高
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表