03.05 單片機為什麼還在用C語言編程?

twinsing


單片機為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。

這個問題的意思應該是:現在有很多很好用的高級語言,如java,python,VC等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不能不能,而是不合適。

一、單片機編程的特點

對單片機編程來說,首先要考慮的是單片機的程序空間和數據空間都是有限的,所以要讓程序儘量短小精悍,以節省程序佔用的存儲空間。

第二、單片機編程的一個主要對象是對單片機的端口和內部寄存器的操作和配置,這個需要比較精確的時序控制。

第三、單片機算法運算中,儘量使用加法、減法、移位運算,因為乘法和除法運算會非常費時間,尤其是除法,會耗費很多時間,這對於速度本身就有限制的單片機來說,是一個很大的負擔。

二、高級語言編寫單片機程序的缺陷

高級語言可以實現更為優化的算法,更為方便的執行方案,但是,高級語言對程序存儲空間的佔用要比彙編和C語言多很多。這是最致命的一點,單片機有限的存儲空間需要靠精打細算來設計程序,根本經不起高級語言臃腫的代碼體積。

高級語言無法實現精確的時序控制。

三、C語言是一個折中選擇

其實用C語言開發單片機也是一個折中方案,因為最適合單片機開發的編程語言實在太過晦澀難懂,並且每一種單片機的彙編指令有很大區別,所以想把一個程序從這種單片機移植到另一種單片機簡直是痴心妄想,還不如重新寫一遍程序。

而C語言代碼執行效率高,也比較精簡,更便於移植......所以在現今的單片機編程語言中,C語言才會佔據絕對主導地位


老馬識途單片機


要看什麼樣的單片機了,現在有些arm架構的單片機性能很強大了,可以在上面安裝微操作系統了,只要調用操作系統的api就可以實現想用的功能了,不一定非要c語言。如果是在一個裸單片機上開發,則需要對芯片的引腳,寄存器等有很好的瞭解,編程語言也只能選擇ASM或者C了。


飛57709646


目前單片機常用開發語言也就彙編語言和C語言。 彙編語言雖然有著優化程度高,可控性更好的優點,但是由於不同單片機採用不同的彙編指令,導致彙編編程學習難度大,易讀性差,可移植性差的缺點。

C語言則避免了這些缺點。由於C語言已基本與彙編指令無關,所以對於同一功能的實現,你只需要瞭解寄存器的不同,更容易移植。並且,由於C語言採用模塊化編程,易讀性大大提高。


二進制君


用c怎麼了,怎麼了,別用你的爪牙,拍黃瓜,c草草來show優越感,世界的一切來源於啥?是誰點亮了宇宙的第一道曙光,所有的井井有條來自於你的why,你要是追求到why的根底,都它,對,不要懷疑,都是它,是它,還是它,一個,所有大廈的根基,都屬於它,回答完畢。

機器語言->c->c++->java,然後後面的都是。。。

性能也是這樣排的

最厲害的還是寫的人,人是一切

c是唯一實現自舉的語言,懂的自然懂,問問微軟,linux,大蘋果,java都會告訴你答案,c是他們的爸爸


衛士斯基_


單片機資源有限,最好使用匯編,但是彙編移植性差,跳轉要寫標號,有時一段代碼跳轉條件多了,寫標號名稱要想半天,換平臺後修改麻煩,不亞於重新寫,而c語言移植性好,換個平臺修改寄存器相關配置就可以重新使用了,節省時間,一般經常用的比如除法乘法運算用匯編寫,c語言直接嵌入,可以提高效率,加快運行速度。


空中夢想家


單片機內存小,譬如一些用於小家電的8位單片機,內存是以K算的,所以用匯編或C編譯出來的目標二進制代碼是最小最高效的,JAVA,C#之類的語言,他們本身是需要JVM或CLI的虛擬機環境來解釋代碼運行,效率太低,而且內存佔用太高,只能用於相對高端的應用程序開發。任何單片機的引導層或驅動層,都是使用匯編或C開發。

其實PASCAL也是可發展為單片機開發語言,可是業界都以ASM與C為標準,沒企業開發基於PASCAL嵌入式編譯器,所以,就只有C和彙編適合單片機開發了。

最後附上一個視頻大家看看,一位大牛用JS寫的8位CPU指令流水執行時內部硅晶電路運行的模擬情況,瀏覽器可以運行,模擬器可以真實執行6502機器碼。

6502CPU是70年代末,喬布斯用來做APPLE II電腦時用的芯片,也是後期中華學習機任天堂FC,小霸王學習機等產品使用的芯片,沒什麼商業價值,但是有研學價值。

\n

{!-- PGC_VIDEO:{"thumb_height": 360, "thumb_url": "6647000833b3a6b9da74\

哈頓大叔


1.彙編太麻煩,移植性差;

2.C/C++為操縱硬件而生,它的編譯器編譯成的目標平臺機器碼可直接運行,並非生成字節碼或者腳本;

3.JAVA,.NET語言編譯出來的程序是字節碼,需要龐大的運行環境將字節碼實時翻譯成機器碼才能運行;

4.Python,Ruby等屬於腳本語言,需要解釋器逐條解釋(pyo可以無視),比字節碼性能更差;

5.單片機性能差,實時性要求高,而且沒有強大的運行環境和解釋器,故一般不能運行JAVA,.NET,Python,Ruby等程序,倒是可以執行Lua這樣輕量級腳本。

C語言是最適合的,沒有之一!


IamKuge


我認為現在單片機用C語言來主要有以下幾個原因:1.單片機IO口很有限,大量的操作都是針對位的運算,C語言相對有優勢點。2.單片機主頻比較低,儲存空間小,用其他高級語言寫的代碼,代碼大,執行率低,不能很好發揮單片機的能力。3.C語言易學,容易看懂,方便移植,結構化,模塊化強。是除彙編外執行效率最高的語言,但彙編不容易看懂,移植很不方便,所以C語言更適合單片機。


紅雨隨心


只有兩種語言可選,彙編語言和C語言,彙編語言要對單片機內部的寄存器非常清楚,程序可讀性差,可移植性也差。C語言編程只需瞭解一下單片機的寄存器即可,程序的可讀性好稍做修改也便於移植到另外一款單片機。


閃閃的紅星84


在裸機狀態下你想操縱硬件,不用匯編和C你用什麼?彙編雖然效率最高,但可讀性和可移植性較差,C語言是最好的選擇,可讀性和可移植性強,還兼顧運行效率,無疑是單片機開發的最佳選擇。


分享到:


相關文章: