1. 程式人生 > >嵌入式開發為什麼選擇C語言及C的缺陷

嵌入式開發為什麼選擇C語言及C的缺陷

一.嵌入式開發中為什麼選擇C語言

第一點:嵌入式是對作業系統的移植,而作業系統的開發中無論是上層應用層還是底層驅動都需要用到 C語言。C語言是面對結構語言,相對於那些面對物件語言,更適合解決嵌入式開發這種具體的工作 。

第二點:C語言有三大特點:1.良好的移植性  2.能夠直接訪問硬體   3.執行效率高

這也是它能夠被選擇的主要原因。 C語言為什麼會具有這樣特點呢?

1.良好的移植性:C語言在不同的軟體平臺,擁有相同的語法。在不同的硬體平臺下同樣適用。所以C語言可以在不同的軟硬平臺,進行很好地移植。

2.直接訪問硬體: C語言中,我們可以通過指標控制記憶體以及暫存器。
我們知道彙編和C語言都可以直接訪問硬體。但彙編的語法較為簡單。因此在複雜的演算法中,我們用C語言。而彙編用於初始化(啟動方面)。

3.執行效率:C語言可以直接生成硬體識別的機器碼。而其他的高階語言需要相應的語言直譯器,再編譯。

二.C語言的缺陷

c語言是面向過程機制,它有很多的缺點。

1.程式碼的複用性差;

2.程式碼的維護性差;

3.程式碼的擴充套件性差;

4.程式碼的可讀性差。

如果想要更加詳細的瞭解C的缺陷,請閱讀《C語言陷阱和缺陷》。









三 .C語言需要模擬面向物件機制來彌補這些缺點。

   面向物件的特徵為

(1)封裝,隱藏內部實現

(2)繼承,複用現有程式碼

(3)多型,改寫物件行為

1.封裝

封裝是一種資訊隱藏技術,它體現於類的說明,是物件的重要特徵。封裝資料和加工該資料的方法(函式)封裝為一個整體,以實現獨立性很強的模組,使得使用者見到物件的外特性(物件能接受哪些訊息,具有那些處理能力),而物件的內特性(儲存內部狀態的私有資料和實現加工能力的

演算法)對使用者是隱蔽的。封裝的目的在於把物件的設計者和物件者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的訊息來訪問該物件。

在c語言中,可以用結構+函式指標來模擬類的實現,而用這種結構定義的變數就是物件。我們可以在標頭檔案中宣告,在c檔案中真正定義,這樣可以隱藏內部資訊,因為外部不知道物件所佔記憶體的大小,所以不能靜態的建立該類的物件,只能呼叫類提供的建立函式才能建立。這種方法的缺陷是不支援繼承,因為子類中得不到任何關於父類的資訊。

2.繼承

繼承性是子類自動共享父類之間資料和方法的機制。它由類的派生功能體現。一個類直接繼承其它類的全部描述,同時可修改和擴充。繼承具有傳遞性。繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類,當前RT-Thread的物件系統不能支援)。類的物件是各自封閉的,如果沒繼承性機制,則類物件中資料、方法就會出現大量重複。繼承不僅支援系統的可重用性,而且還促進系統的可擴充性。


在c語言中,可以利用“結構在記憶體中的佈局與結構的宣告具有一致的順序”這一事實實現繼承。

3.多型

物件根據所接收的訊息而做出動作。同一訊息為不同的物件接受時可產生完全不同的行動,這種現象稱為多型性。利用多型性使用者可傳送一個通用的資訊,而將所有的實現細節都留給接受訊息的物件自行決定,如是,同一訊息即可呼叫不同的方法。例如:抽象裝置具備介面統一的讀寫介面。串列埠是裝置的一種,也應支援裝置的讀寫。但串列埠的讀寫操作是串列埠所特有的,不應和其他裝置
操作完全相同,例如操作串列埠的操作不應應用於sd卡裝置中。多型性的實現受到繼承性的支援,利用類繼承的層次關係,把具有通用功能的協議存放在類層次中儘可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上生成的物件就能給通用訊息以不同的響應。在c語言中我們可以用萬能指標void*來實現多型。