如今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語言,單片機也往更高集成度,更強大功能發展。
所以學習單片機不一定要精通彙編,但對彙編有一定了解,對學習單片機有幫助,只有在某一些功能需求時,可以適當運用彙編。
大家有什麼觀點,評論區下方留言