03.01 單片機用C語言編程很好學,為什麼還要用匯編呢?

天晴電子玩家


C語言是發展趨勢,彙編可以幫助學生熟悉單片機內部結構。

首先彙編語言和C語言都是編程語言,彙編是一種機器語言直接面對底層,與單片機底層硬件構架息息相關,相對於C語言,是一門低級語言,C語言面向過程的語言,在編譯執行會轉為彙編在生成單片機可執行文件。是一門高級語言,兩種語言各有優缺點。

一,C語言/彙編優缺點。

1學習難度。

彙編因為的理解難度和開發難度比C語言大,所以學習難度大,都是對寄存器操作,學習彙編就要學習這個單片機的硬件結構和基本組成、存儲器訪問方式、單片機I/O操作時序、定時計數器、中斷處理、指令系統、尋址方式等知識點;而且每個系列芯片的內部寄存地址和寄存器都有差異,維護起來也十分困難。

2執行效率

彙編實時性比C語言好,佔用單片機資源少,生成的執行文件更小,彙編語言程序直接被轉換成機器指令。而C語言編譯過程會先形成彙編,在轉為機器語言。

3移植性

C語言比彙編移植性好,程序可讀性比彙編要強。實現相同功能,C語言的代碼數量會比較短,對於彙編來說,每一種單片機彙編語言都不一樣。所以移植性差。

C語言通過結構體,指針映射寄存器地址,當有需要時候,只需要簡單更改寄存器地址,或者更改寄存器定義,即可滿足程序和工程的移植。

4,調試

C語言調試方便,例如STM32開發過程中,可以使用jlink通過SWD進行在線仿真,調試各語法,語句執行情況,還可以查看各變量值的變化,很容易就能定位到BUG問題。而彙編調試困難,很多時候難以很快定位問題。

二,單片機開發不一定都能用C語言

單片機在上個世紀七十年代開始出現,早期都使用匯編語言進行開發,隨著技術的發展進步,製程工藝快速提升,單片機的處理速度越來越快,很多單片機的開發環境都使用C語言編譯,生產二進制文件。

但因產品BOM成本要求,很多的低端單片機還是OTP一次性燒錄,程序空間小,許多的型號,還是在用匯編進行開發,如義隆,松翰等。

三,學習彙編並不是無用

1,大學時學習彙編,有助於理解單片機系統構架,指令集,和寄存器尋址等知識點,也促進對於C語言的指針的用法。

2,目前的linux開發的部分底層bootload文件,或stm32的.s啟動文件就是使用匯編語言的文件,都使用匯編進行底層引導。修改堆棧,或者程序起始運行的位置,都需要在對應文件中修改。或者學習UCOS也會涉及修改啟動文件內相關數據。

四 單片機發展趨勢:C語言

當前設備半導體的成本,隨著製程工藝的提升而降低,越來越多的低端8位單片機開始從彙編轉向到C語言,單片機也往更高集成度,更強大功能發展。

所以學習單片機不一定要精通匯編,但對彙編有一定了解,對學習單片機有幫助,只有在某一些功能需求時,可以適當運用匯編。


科技電小二


現在一般單片機都支持C語言和晦澀難懂的彙編語言,在許多介紹單片機應用技術的教材中有相當一部分是用匯編語言編寫的這說明彙編語言在學習單片機和編寫單片機程序時尤其獨特的優勢,現在我把學習單片機使用匯編語言的一些優勢來發表自己的看法,希望能夠通過我說的這幾點給學習單片機的朋友們一個參考意見並順便解答一下這個問題。

第一點單片機彙編語言在執行效代碼效率非常高

雖然單片機彙編語言在剛學初期會顯得“晦澀難懂”但也並不是“一無是處”,在有些方面是單片機C語言所不能企及的,比如彙編語言首先在機器碼生成方面其效率要比C語言高20%,所以用匯編語言編寫程序能夠減少佔用單片機裡的寄存器單元,特別是對於容量小的單片機而言很重要。總之彙編語言要比C語言執行效率更高。

第二點單片機彙編語言執行速度快

我們知道任何編程語言最終都要生成單片機能夠“識別”和執行的二進制碼,由於彙編語言可以直接訪問單片機的內部寄存器,所以單片機的彙編語言執行速度要比C語言快的多,可以實施精細而準確 的控制,在一些實時控制要求比較嚴格的控制場合一般要求用匯編語言。

第三點單片機彙編語言能夠幫助有助於瞭解單片機內部的結構,尤其是寄存器

由於彙編語言的每條指令與單片機的指令碼是一一對應的,所以通過學習單片機的彙編語言有助於學習單片機內部結構組成以及它的外設。尤其是對熟悉單片機內部的各種寄存器有很大的幫助。

鑑於以上三點我認為,單片機C語言編程和彙編語言編程各有各的特點,要想學好單片機並運用好單片機就要把這兩種單片機語言都要學好才行。

以上就是我對這個問題的看法,歡迎朋友們參與討論。敬請關注電子及工控技術,歡迎大家點贊


電子及工控技術


要看是什麼單片機。


32位單片機

如STM32。用C語言很合適,絕大多數工作都可以而且應該用C或者更高級的語言完成。只有極少數對性能或代碼空間要求高的部分需要用匯編語言實現。

這類單片機在實際工作中也很少用到彙編,C語言基本能滿足開發各種功能的需求。


8位單片機

如51系列,部分AVR。性能低,C編譯器也不夠標準。尤其因為歷史上C編譯器較昂貴,所以在這些平臺上有大量彙編語言開發的積累。

另外,低端單片機往往實現的是簡單邏輯,用匯編語言開發慣了的人,也沒有太大動力改用C語言。

這樣以來,學校課程中使用匯編語言也就正常了:既體現了一定的歷史慣性、也有助於更深入的理解單片機系統。


從自己學習來說,彙編語言瞭解一下還是不錯的。深入學習還是選C,以後單片機上直接用匯編的會越來越少。


夏冬


現在常見的用匯編的一些場合,往往有嚴格的時間要求。比如中斷,特別是arm的快速中斷,還比如一些對時間要求非常高的測控場合,可能要求微秒甚至納秒級別的響應速度。這些應用在編程的時候有可能會一條指令的執行時間也會考慮。還有一些重複進行的運算函數,如果重複的次數多,又對時間有要求,那函數的執行時間又需要一條一條指令的扣。

還有一些場合,應用的cpu ,比如有些pic單片機,只有1k甚至512字節的空間,rom空間比較小,c語言優化後的編譯代碼,可能還是不如純粹的彙編精簡,這就需要彙編。

還有一些其他場合也是對代碼空間有要求,比如linux啟動的bootloader,還有PC上常見的常見文件系統mbr代碼,也需要用匯編來編寫。

此外對於單純的學習來講,彙編語言跟硬件的關係更密切,更直接,學習彙編更有利於理解單片機的結構。


深空深處


目前很多主流單片機都是支持C語言編寫,廠商會提供相應的C語言庫,編譯器也大都支持C語言開發,C語言上手快學習成本低,只是應用層面的話其實C語言就差不多夠用了。但是使用C編寫最後還是會被編譯器變成彙編代碼,實質還是在寫彙編。彙編效率高,對機器直接操作,更加底層,所以想深入的學習單片機,彙編是不可不學的,並且一般最底層設置都是彙編寫的,還有不少底層設置是無法用C去調用或者改寫的,這個時候看懂彙編和使用匯編就很重要了。


KINGE


如果不涉及底層開發,可以不學彙編語言。但最好懂一點。懂彙編,比較容易真正的理解計算機運行的機理。


嵌入君


其實彙編更好用。只要你會用宏定義模擬類似C函數的調用。


eexpss


因為很多廉價的芯片採用私有指令集,沒有C編譯器,只能用匯編。這類芯片價格便宜,用量遠遠超過stm avr stc這些。


光明右使8787


誰敢用高級語言玩數時鐘脈衝個數的中斷響應?


素食的貓


最基本的,c編譯器無法根據c生成一些機器指令或無法準確生成機器指令的序列


分享到:


相關文章: