嵌入式c語言與c語言的區別

最廣泛使用的系統編程語言是C語言,它是使用自由格式源代碼的簡單編程語言;它曾用於以前用匯編語言構建的應用程序中。嵌入式C是C語言的擴展,它在嵌入式系統中應用於編寫嵌入式軟件,那麼二者之間究竟有什麼差異呢?

一、啟動過程

1. 通用c語言程序的啟動過程

普通c語言啟動程序搭載了windows或linux等通用操作系統的PC機,編譯器會自動完成啟動程序,對微處理器和外圍設備進行初始化,然後再調用main函數,用戶沒有必要製作自己的啟動程序。

嵌入式c語言與c語言的區別

2. 嵌入式c語言程序的啟動過程

嵌入式c語言搭載微處理器,用於嵌入式系統的啟動程序要能夠對目標系統的硬件和數據進行初始化,因此,用戶必須做特定的啟動程序。一般情況下,在支持微處理器的編譯器中會捆綁相應的啟動程序,如下圖:

嵌入式c語言與c語言的區別

二、存儲空間的分配

存儲器ROM和RAM

RAM:隨機存取存儲器(random access memory)又稱作“隨機存儲器”,是與CPU直接交換數據的內部存儲器,也叫主存(內存)。它可以隨時讀寫,而且速度很快,通常作為操作系統或其他正在運行中的程序的臨時數據存儲媒介。當電源關閉時RAM不能保留數據。如果需要保存數據,就必須把它們寫入一個長期的存儲設備中(例如硬盤)。RAM和ROM相比,兩者的最大區別是RAM在斷電以後保存在上面的數據會自動消失,而ROM不會自動消失,可以長時間斷電保存。

ROM:只讀存儲器。ROM所存數據,一般是裝入整機前事先寫好的,整機工作過程中只能讀出,而不像隨機存儲器那樣能快速地、方便地加以改寫。ROM所存數據穩定,斷電後所存數據也不會改變。

1. 對於普通c程序,操作系統將程序和數據從外部存儲設備載入RAM中運行。代碼、數據、堆棧都在RAM中。

2. 對於嵌入式c程序,因沒有通用的操作系統,嵌入式系統必須先將代碼設置到ROM中,將數據、堆棧設置到RAM中才可以運行。

三、對於硬件的訪問

嵌入式c語言與c語言的區別

1.如上圖所示:對於普通c語言而言,操作系統對計算機硬件設備進行操作,如控制聲卡發出聲音,控制顯卡繪製圖形等。

應用程序可以通知操作系統執行某個具體的動作,以便使應用程序間接的通過操作系統對硬件進行操作。

對於操作系統是怎樣控制硬件設備的只需大致瞭解即可,此過程為應用程序對API調用的過程,這一過程稱為系統調用,通過系統提供的接口函數就可以指揮操作系統來工作了。

嵌入式c語言與c語言的區別

2.如上圖所示:嵌入式系統在訪問硬件時,必須編寫直接操作硬件的應用程序。

四、資源的限制

1.由於在嵌入式系統中使用小而耗電的組件,嵌入式系統具有有限的ROM和RAM以及較少的處理能力,因此在嵌入式C中編寫程序時應該注意有限的資源。

2.在C語言中,臺式計算機可以訪問系統操作系統,存儲器等,可以利用所有計算機資源。

五、應用方向

1.C主要用於簡單但邏輯的程序,基於操作系統的軟件等。

2.嵌入式C用於電視,洗衣機等微控制器。


分享到:


相關文章: