C語言能夠實現單片機功能,為什麼還要使用彙編呢?

2020-12-03 技術閒聊

如今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語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    許多小夥伴在學完C語言後想入門單片機,但學著學著發現明明都是C語言,為什麼單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什麼樣的不同。
  • 單片機程序C語言與彙編語言混合編程
    中C語言與彙編語言混合編程本文引用地址:http://www.eepw.com.cn/article/201611/322505.htm1.C語言函數和彙編語言函數相互調用在這個示例中C語言函數main()調用彙編語言函數get_rand()以得到一個隨機數;彙編語言函數get_rand()首先調用C語言的標準庫函數rand()得到一個整型隨機值,然後用調用C語言函數mult()的方法把這個隨機值乘以main()函數傳遞給自己的實參,並把乘積值返回給
  • 為什麼C語言是最適合單片機編程的高級語言!
    為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不是不能,而是不合適。
  • PIC單片機C語言程序實例
    這就出現了精通51單片機彙編語言的人不能直接編寫PIC或其他單片機的彙編語言源程序,反之亦然的現象,以及產品升級換代和不同單片機問程序移植難的問題。而且,由於彙編語言是採用助記符的低級語言,可讀性較差,當源程序功能多、程序長時,即使加了注釋,閱讀自己編寫的程序也會感到困難,更不用說修改程序和增加功能了。
  • C語言和彙編語言是什麼?他們之間可以有怎樣的合作?為你解析
    C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的程式語言;儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平臺。
  • PIC單片機C語言程序設計(8)
    即可用MPLAB IDE7.40 對PIC 單片機建立彙編語言或C 語言的源程序、創建項目(project)、對源程序進行彙編(使用彙編語言時)或編譯(使用C 語言時),彙編或編譯通過後,會生成目標碼。hex 文件。有了目標碼。hex 文件,就可對PIC 單片機編程(燒寫)和對源程序進行模擬調試了。
  • 單片機c語言教程:建立你的第一個KeilC51項目
    隨著單片機技術的不斷發展,以單片機C語言為主流的高級語言也不斷被更多的單片機愛好者和工程師所喜愛。使用C51肯定要使用到編譯器,以便把寫好的C程序編譯為機器碼,這樣單片機才能執行編寫好的程序。
  • PIC單片機C語言編程教程(1)
    針對 PIC 單片機的軟體開發,同樣可以用 C 語言實現。但在單片機上用 C 語言寫程序和在 PC 機上寫程序絕對不能簡單等同。現在的 PC 機資源十分豐富,運算能力強大,因此程式設計師在寫 PC 機的應用程式時幾乎不用關心編譯後的可執行代碼在運行過程中需要佔用多少系統資源,也基本不用擔心運行效率有多高。
  • 最適合單片機編程的高級語言,除了C語言,別無選擇!
    單片機為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python,VC等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不能不能,而是不合適。
  • 51單片機教程之基礎編(基於C語言)
    很多初學者有很多的疑惑,我究竟是先學C語言,還是彙編語言?其實我告訴你,本人認為,先學C語言!為什麼呢?C語言是目前使用最廣泛的中級語言,就連現在的windows7也是C語言編寫的,C語言易讀性好,無需對單片機內部結構十分熟悉即會編程,可移植性高,便於維護。C語言只有32個關鍵字,9種控制語句,而且編譯器提供了很多函數庫,使用十分方便。
  • 單片機C語言延時分析
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。
  • 世界上第一個C語言編譯器是怎麼編寫的?它為什麼能夠用C語言編寫?
    不知道大家有沒有想過一個問題:C語言編譯器為什麼能夠用C語言編寫? 今天小編就帶大家一探究竟! 在C語言被用作系統程式語言之前,Tomphson已經使用B語言編寫過作業系統。可見在C語言實現以前,B語言已經可以投使用了。 因此第一個C語言編譯器的原型完全可能是用B語言或者混合B語言與PDP彙編語言編寫的。
  • 單片機C語言精確延時值的計算
    關於單片機C語言的精確延時,網上很多都是大約給出延時值沒有準確那值是多少,也就沒有達到精確高的要求,而51hei給出的本函數克服了以上缺點,能夠精確計數出要延時值且精確達到1us,本舉例所用CPU為STC12C5412系列12倍速的單片機,只要修改一下參數值其它系例單片機也通用
  • C語言與彙編語言混合編程應遵守的規則
    在使用C語言時,要用到和彙編語言的混合編程。若彙編代碼較為簡潔,則可使用直接內嵌彙編的方法;否則要將彙編程序以文件的形式加入到項目中,按照ATPCS(ARM/Thumb過程調用標準,ARM/Thumb Procedure Call Standard)的規定與C程序相互調用與訪問。
  • 高級語言中的語句在彙編中是如何實現的
    高級語言中的語句在彙編中是如何實現的 我們都知道對於c語言來說,它是需要先轉換成彙編語言,然後再生成機器語言的。那麼在c語言中,各種條件語句,各種表達式的計算,在彙編中是何如實現的呢?今天我們就來講解一下。
  • 單片機中C語言延時函數
    單片機C語言延時程序計算2009-11-02 22:15單片機C語言延時程序用C語言寫出來程序非常的簡練,它是一種模塊化的語言,一種比彙編更高級的語言,但是就是這樣一種語言也還是有它不足之處:它的延時很不好控制
  • Stm32單片機開發KEIL啟動文件彙編語言詳解
    文章目錄簡介啟動文件彙編代碼相關指令堆棧空間的定義初始化中斷向量表復位中斷函數中斷函數的弱(WEAK)聲明用戶棧和堆初始化簡介我們在做單片機編程的時候,大部分都是用KEIL自帶的啟動文件來使程序進入C語言main函數,然後進行C語言編程開發的工作。那麼這個啟動文件到底做了什麼呢?相信朋友們肯定和我一樣好奇,想弄明白啟動文件到底都幹了些什麼。
  • 單片機C語言知識點全攻略(三)
    第八課、運算符和表達式(位運算符)  學過彙編的朋友都知道彙編對位的處理能力是很強的,但是單片機C語言也能對運算對象進行按位操作,從而使單片機C語言也能具有一定的對硬體直接進行操作的能力。位運算符的作用是按位對變量進行運算,但是並不改變參與運算的變量的值。如果要求按位改變變量的值,則要利用相應的賦值運算。
  • 單片機10秒倒計時c語言彙編語言程序
    (2)數碼管動態顯示(循環顯示0~9,時間間隔為1秒,1秒的時間間隔用定時器T0實現)①彙編語言:ORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0030HMAIN:CLR P2.7MOV