{eval=Array;=+count(Array);}
C語言是發展趨勢,匯編可以幫助學生熟悉單片機內部結構。
首先匯編語言和C語言都是編程語言,匯編是一種機器語言直接面對底層,與單片機底層硬件構架息息相關,相對于C語言,是一門低級語言,C語言面向過程的語言,在編譯執行會轉為匯編在生成單片機可執行文件。是一門高級語言,兩種語言各有優缺點。
1學習難度。
匯編因為的理解難度和開發難度比C語言大,所以學習難度大,都是對寄存器操作,學習匯編就要學習這個單片機的硬件結構和基本組成、存儲器訪問方式、單片機I/O操作時序、定時計數器、中斷處理、指令系統、尋址方式等知識點;而且每個系列芯片的內部寄存地址和寄存器都有差異,維護起來也十分困難。
2執行效率
匯編實時性比C語言好,占用單片機資源少,生成的執行文件更小,匯編語言程序直接被轉換成機器指令。而C語言編譯過程會先形成匯編,在轉為機器語言。
3移植性
C語言比匯編移植性好,程序可讀性比匯編要強。實現相同功能,C語言的代碼數量會比較短,對于匯編來說,每一種單片機匯編語言都不一樣。所以移植性差。
C語言通過結構體,指針映射寄存器地址,當有需要時候,只需要簡單更改寄存器地址,或者更改寄存器定義,即可滿足程序和工程的移植。
4,調試
C語言調試方便,例如STM32開發過程中,可以使用jlink通過SWD進行在線仿真,調試各語法,語句執行情況,還可以查看各變量值的變化,很容易就能定位到BUG問題。而匯編調試困難,很多時候難以很快定位問題。
單片機在上個世紀七十年代開始出現,早期都使用匯編語言進行開發,隨著技術的發展進步,制程工藝快速提升,單片機的處理速度越來越快,很多單片機的開發環境都使用C語言編譯,生產二進制文件。
但因產品BOM成本要求,很多的低端單片機還是OTP一次性燒錄,程序空間小,許多的型號,還是在用匯編進行開發,如義隆,松翰等。
1,大學時學習匯編,有助于理解單片機系統構架,指令集,和寄存器尋址等知識點,也促進對于C語言的指針的用法。
2,目前的linux開發的部分底層bootload文件,或stm32的.s啟動文件就是使用匯編語言的文件,都使用匯編進行底層引導。修改堆棧,或者程序起始運行的位置,都需要在對應文件中修改。或者學習UCOS也會涉及修改啟動文件內相關數據。
當前設備半導體的成本,隨著制程工藝的提升而降低,越來越多的低端8位單片機開始從匯編轉向到C語言,單片機也往更高集成度,更強大功能發展。
所以學習單片機不一定要精通匯編,但對匯編有一定了解,對學習單片機有幫助,只有在某一些功能需求時,可以適當運用匯編。
現在一般單片機都支持C語言和晦澀難懂的匯編語言,在許多介紹單片機應用技術的教材中有相當一部分是用匯編語言編寫的這說明匯編語言在學習單片機和編寫單片機程序時尤其獨特的優勢,現在我把學習單片機使用匯編語言的一些優勢來發表自己的看法,希望能夠通過我說的這幾點給學習單片機的朋友們一個參考意見并順便解答一下這個問題。
雖然單片機匯編語言在剛學初期會顯得“晦澀難懂”但也并不是“一無是處”,在有些方面是單片機C語言所不能企及的,比如匯編語言首先在機器碼生成方面其效率要比C語言高20%,所以用匯編語言編寫程序能夠減少占用單片機里的寄存器單元,特別是對于容量小的單片機而言很重要。總之匯編語言要比C語言執行效率更高。
我們知道任何編程語言最終都要生成單片機能夠“識別”和執行的二進制碼,由于匯編語言可以直接訪問單片機的內部寄存器,所以單片機的匯編語言執行速度要比C語言快的多,可以實施精細而準確 的控制,在一些實時控制要求比較嚴格的控制場合一般要求用匯編語言。
由于匯編語言的每條指令與單片機的指令碼是一一對應的,所以通過學習單片機的匯編語言有助于學習單片機內部結構組成以及它的外設。尤其是對熟悉單片機內部的各種寄存器有很大的幫助。
鑒于以上三點我認為,單片機C語言編程和匯編語言編程各有各的特點,要想學好單片機并運用好單片機就要把這兩種單片機語言都要學好才行。
以上就是我對這個問題的看法,歡迎朋友們參與討論。敬請關注電子及工控技術,歡迎大家點贊
要看是什么單片機。
如STM32。用C語言很合適,絕大多數工作都可以而且應該用C或者更高級的語言完成。只有極少數對性能或代碼空間要求高的部分需要用匯編語言實現。
這類單片機在實際工作中也很少用到匯編,C語言基本能滿足開發各種功能的需求。
如51系列,部分AVR。性能低,C編譯器也不夠標準。尤其因為歷史上C編譯器較昂貴,所以在這些平臺上有大量匯編語言開發的積累。
另外,低端單片機往往實現的是簡單邏輯,用匯編語言開發慣了的人,也沒有太大動力改用C語言。
這樣以來,學校課程中使用匯編語言也就正常了:既體現了一定的歷史慣性、也有助于更深入的理解單片機系統。
從自己學習來說,匯編語言了解一下還是不錯的。深入學習還是選C,以后單片機上直接用匯編的會越來越少。
現在常見的用匯編的一些場合,往往有嚴格的時間要求。比如中斷,特別是arm的快速中斷,還比如一些對時間要求非常高的測控場合,可能要求微秒甚至納秒級別的響應速度。這些應用在編程的時候有可能會一條指令的執行時間也會考慮。還有一些重復進行的運算函數,如果重復的次數多,又對時間有要求,那函數的執行時間又需要一條一條指令的扣。
還有一些場合,應用的cpu ,比如有些pic單片機,只有1k甚至512字節的空間,rom空間比較小,c語言優化后的編譯代碼,可能還是不如純粹的匯編精簡,這就需要匯編。
還有一些其他場合也是對代碼空間有要求,比如linux啟動的bootloader,還有PC上常見的常見文件系統mbr代碼,也需要用匯編來編寫。
此外對于單純的學習來講,匯編語言跟硬件的關系更密切,更直接,學習匯編更有利于理解單片機的結構。
目前很多主流單片機都是支持C語言編寫,廠商會提供相應的C語言庫,編譯器也大都支持C語言開發,C語言上手快學習成本低,只是應用層面的話其實C語言就差不多夠用了。但是使用C編寫最后還是會被編譯器變成匯編代碼,實質還是在寫匯編。匯編效率高,對機器直接操作,更加底層,所以想深入的學習單片機,匯編是不可不學的,并且一般最底層設置都是匯編寫的,還有不少底層設置是無法用C去調用或者改寫的,這個時候看懂匯編和使用匯編就很重要了。
10
回答10
回答3
回答7
回答10
回答10
回答5
回答10
回答10
回答0
回答