C語言能夠實現微控制器功能,為什麼還要使用匯編呢?

如今C語言確實很強大,在嵌入式程式設計當中應用廣泛,但是為什麼還要學習組合語言,難學又不易理解?

首先組合語言和C語言都是程式語言,彙編是一種機器語言直接面對底層,與微控制器底層硬體構架息息相關,相對於C語言,是一門低階語言,C語言面向過程的語言,在編譯執行會轉為彙編在生成微控制器可執行檔案。是一門高階語言,兩種語言各有優缺點。

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

1學習難度。

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

C語言能夠實現微控制器功能,為什麼還要使用匯編呢?

2執行效率

彙編實時性比C語言好,佔用微控制器資源少,生成的執行檔案更小,組合語言程式直接被轉換成機器指令。而C語言編譯過程會先形成彙編,在轉為機器語言。

3移植性

C語言比彙編移植性好,程式可讀性比彙編要強。實現相同功能,C語言的程式碼數量會比較短,對於彙編來說,每一種微控制器組合語言都不一樣。所以移植性差。

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

4,除錯

C語言除錯方便,例如STM32開發過程中,可以使用jlink透過SWD進行線上模擬,除錯各語法,語句執行情況,還可以檢視各變數值的變化,很容易就能定位到BUG問題。而彙編除錯困難,很多時候難以很快定位問題。

C語言能夠實現微控制器功能,為什麼還要使用匯編呢?

二,微控制器開發不一定都能用C語言

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

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

三,學習彙編並不是無用

1,大學時學習彙編,有助於理解微控制器系統構架,指令集,和暫存器定址等知識點,也促進對於C語言的指標的用法。

2,目前的linux開發的部分底層bootload檔案,或stm32的。s啟動檔案就是使用匯編語言的檔案,都使用匯編進行底層引導。修改堆疊,或者程式起始執行的位置,都需要在對應檔案中修改。或者學習UCOS也會涉及修改啟動檔案內相關資料。

C語言能夠實現微控制器功能,為什麼還要使用匯編呢?

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

當前裝置半導體的成本,隨著製程工藝的提升而降低,越來越多的低端8位微控制器開始從彙編轉向到C語言,微控制器也往更高整合度,更強大功能發展。

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

大家有什麼觀點,評論區下方留言