嵌入式編譯程式

早期的嵌入式編譯器用彙編語言直接編寫,不同類型處理器所使用的 彙編語言也都不盡相同,極大地限制了嵌入式系統前進的步伐。現階段嵌入式編譯程式由高級語言編寫,使開發人員盡最大的可能獨立於計算機硬體系統結 構之外來進行程式開發設計。

基本介紹

  • 中文名:嵌入式編譯程式
  • 外文名:embedded compiler
  • 領域:計算機、嵌入式開發
  • 屬性:編譯程式
  • 功能:將高級語言翻譯成機器語言程式
  • 特性:可靠性、可維護性、可重入性
簡介,嵌入式系統,發展,編譯器前端設計,詞法分析,語法分析,符號表設計,語義分析及中間代碼生成,中間代碼最佳化,目標代碼生成,

簡介

嵌入式編譯程式是指套用在嵌入式系統中的編譯程式。
在 計算機上執行一個高級語言程式需要兩步:利用編譯器將高級語言程式翻譯成為機器語言程式; 運行得到的 機器語言程式求得計算結果。 編譯器是將高級語言在邏輯等價的原則上翻譯為底層的彙編語言或者 機器語 言的計 算機程 序。在 這裡,輸入 的高級語言稱 作源程式(Source Language) , 而輸出的底層語言稱作目標語 言 (TargetLanguage)。編譯程式在計算機系統中的作用如下圖所示:
嵌入式編譯程式

嵌入式系統

嵌 入式系統是基於特定用途的 , 以計算機技術為基礎 ,其軟硬體具備良好可裁剪性的專用計算機系統,適用於對功能、可靠性、成本、體積、 功耗有嚴格要 求的場合。它一般由嵌入式微處理器、 外圍硬體設備、嵌入式作業系統以及用戶應用程式四個部分組成。從 20 世紀 60年代中期積體電路誕生至今,嵌入式系統套用已經有接近 40 年的發展歷史。
通常來說,嵌入式系統具備以下特點:
(1)體積小,重量輕。
(2)結構簡單、功耗低、可靠性高。
(3)便於規模化生產、價格相對低廉。
(4)模組化、晶片化。
(5)強調量身定做的原則。
由於具備上述特點,嵌入式系統被廣泛套用於製造業、過程控制、通信、儀器儀表、汽車 、船舶、航空航天、武器系統、個人電子消費品等領域 。伴隨著積體電路製造工藝的發展, 尤其是單片機 處理器技術的不斷 進步 ,使嵌入式系統的套用進入到了突飛猛進的發展階段。如美國休斯公司 1995 年研製成功的套用於航空航天高速圖像處理的新型三維嵌入式計算機系統。

發展

很長一段時間以來, 嵌入式系統的 軟體都 採用彙編語言直接編寫,這就使得嵌入式系統的開發只能由匯 編語言 程式設計師採用原始的開發工具完成。由此而造成的直接後果就是 使嵌入式系統軟體 開發的效率低下、周期過長;而且利用彙編語言開發的程 序代碼可讀 性、可移植性 、可維護性、可重用性 都相對 較差, 從而使 開發出的應 用軟體無法具有很好的可靠性。
隨著嵌入式系統硬體性能的不斷提高,嵌入式系統的套用場合在不斷擴展、性能要求在不斷增加,在嵌入式系統上運行的軟體也越來越龐大、結構更加復 雜。因 此過去對於嵌入式系統軟體在時 、空間方面的限制現在已經不是設計時所考慮的最主要因素;相反,對嵌入式系統軟體的可靠性、可維護性、可重入性則提出了更高的要求。
國外使用高級語言進行嵌入式系統開發的時間較早,例如 1975 年美國國防部為更好的進行航空航天嵌入式系統實 時控制而開發的高級程式 設計語言Ada。實踐證明,使用高級語言進行嵌入式系統開發可以極大地提高程式的可維護性、可靠性、可重用 性和開發效 率。目前,嵌入式系統的開發平台已經向高級語言化和集成化方向發展,並多採用了交叉開發的方法。

編譯器前端設計

詞法分析

編譯程式是在單詞級別上對源程式進行分析和翻譯,詞法分析是編譯程式的第一個階段。在這個階段,詞法分析模組從源程式的起始位置開始按照順序逐個讀入字元並進行詞法分析,並得出分析之後所產生的單詞序列。詞法分析程式的功能是輸入源程式,輸出單詞符號。單詞符號是一個程式設計語言的基本要素,根據 ANSI C 標準的基本規定和目標系統的功能需求,我們將單詞符號劃分為以下五種類型:
(1)關鍵字(或者稱作保留字)。由 M68HC11 C 語言定義並具有固定意義的標識符號,例if、do、while、for等等。
(2)標識符。用於表示各種名字,例如變數名、數組名、過程名等。
(3)各種類型的常量。例如布爾常量、八位字元型常量、十六位整型常量。
(4)運算符。例如+、-、%、!等。
(5)界符。例如分號、逗號、括弧等。

語法分析

語法分析是編譯過程中的核心部分。源程式在經過詞法分析之後,其形式 由字元 流轉化 成為單 詞流。 語法分析就 是在輸入程式 單詞流的基礎之上來分析並判定輸入程式的語法結構是否符合語法規則。下圖說明了語 法 分析 在編譯過 程中的 作用以及詞 法分析與語法 分析之間的相互關係。
嵌入式編譯程式

符號表設計

在編譯過程中特別是在語義分析和代碼生成過程中,編譯程式需不斷匯集和反覆查證出現在源程式中各種名 字的屬性和特徵信息,這些信息通常被記錄在符號表中。符號表的組織是編譯過程中的一門重要技術,一個具有良好組織結構的符號表必須同時滿足以下要求:
(1)正確的記錄源程式中的各種名字屬性以及特徵信息。
(2)滿足編譯處理過程中對各種名字的不斷匯集和反覆查找。
在編譯器對源程式的詞法分析階段,每當識別出一個新的符號名字(標識符),編譯器都需要在符號表中查找該符號是否已經存在。如果不存在,則將該符號寫入到符號表 中 。每一個符號的 相關信息將在後續的 語 法分析 、語義 分析過程中陸續填入符號表。符號表中的信息在編譯的不同階段都要用到。例如在語法和語義分析過 程中,符號表的記錄信息將用於語義檢查和中間代碼生成,在目標代碼生成過程中,符號表的信息將作為地址分配的依據。
符號表的組織是編譯過程中的一門重要技術,一個具有良好組織結構的符號表必須同時滿足以下要求:
(1)正確的記錄源程式中的各種名字屬性以及特徵信息。
(2)滿足編譯處理過程中對各種名字的不斷匯集和反覆查找。

語義分析及中間代碼生成

在編譯過程中語義分析主要實現兩方面的功能:
(1)驗證具有正確語法結構的源程式是否具有真正意義(靜態語義分析)。
(2)對通過靜態語義分析的源程式進行翻譯(中間代碼生成)。

中間代碼最佳化

對程式進行各種等價變換,使得從變換之後的程式出發能夠生成效率更高的目標代碼,稱之為最佳化。最佳化可以在編譯的各個階段進行,但最主要的一類最佳化是在目 標代碼生成之前, 針對語義分析所產生的中間代碼進行的,這是因為對中間代碼的最佳化不依賴於具體的計算機。最佳化的目的是為了產生執行效率更高的代碼, 編譯程式對中間代碼的最佳化必須遵循一定的原則:
(1)等價原則。最佳化不應改變程式的運行結果。
(2)有效原則。最佳化產生的代碼應具有更高的運行效率和更少的存儲空間。
(3)成本原則。儘可能以較低的代價獲得較好的最佳化效果。

目標代碼生成

目標代碼生成部分是編譯過程的最後一個階段,它以編譯前端產的信息作為輸入, 輸出與 具體目標機相關的 目標代碼。編 譯前端產生的信息包括最佳化之後的中間代碼以及符號表中的相關信息 ,編譯後端生成的目標代碼可以是機器指令代碼,也可以是彙編指令程式 。
根據最終用途的不同,由目標代碼生成器輸出的目標代碼由三部分組成:包含全局和靜態數據的數據鏈區(對 應執行檔中的數據段),包含目標指令和運算元的指令代碼區(對應執行檔中的代碼段),包含數據和符號地址信息的地址區。
在代碼生成過程中,編譯程式需要不斷的查詢符號表以獲取各種符號名字的信息,同時建立新的數據結構以存放輸出的目標代碼。
編譯程式生成的目標指令最終需要裝入目標機的暫存器執行, 因此如何為指令分配目標機的暫存器是代碼生成時需要考慮的一個重要問題。對暫存器的分配需要遵循一些基本原則,例如當生成一條目標指令時,如果該指令的運算元已經存在於暫存器中,那么就可以直接對暫存器進行操作而無需將運算元重新裝入。

相關詞條

熱門詞條

聯絡我們