嵌入式C程序的編譯與調(diào)試.ppt_第1頁
嵌入式C程序的編譯與調(diào)試.ppt_第2頁
嵌入式C程序的編譯與調(diào)試.ppt_第3頁
嵌入式C程序的編譯與調(diào)試.ppt_第4頁
嵌入式C程序的編譯與調(diào)試.ppt_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、3.1 C語言編譯器、c語言編譯器c語言編譯過程Makefile、3.1.1 C語言編譯器和c語言誕生于70年代初。 一九七八年美國電話電報公司(ATT )貝爾實驗室正式發(fā)表c語言。 早期的c語言主要是UNIX系統(tǒng)上目前最流行的c語言編譯器有GNU編譯器收集、GCC Microsoft C或MS C Borland Turbo C或Turbo C、3.1.2 C語言編譯過程。 編譯器:編譯器對源程序進行字句和語法分析,將高級語言指令轉(zhuǎn)換為功能等效的程序集代碼,從程序集轉(zhuǎn)換為機器語言,并根據(jù)操作系統(tǒng)可執(zhí)行文件格式的請求鏈接生成可執(zhí)行文件。 c源程序頭文件預(yù)編譯處理(cpp )編譯器自身優(yōu)化程序匯

2、編鏈接程序-可執(zhí)行文件預(yù)處理編譯階段優(yōu)化階段匯編進程鏈接程序、3.1.2.1編譯預(yù)處理、預(yù)處理: 偽指令主要是通過這種替代方式(其中在諸如#ifdef、#ifndef、#else、#elif、#endif之類的宏定義指令、#define Name #undef條件編譯指令、#include之類的報頭文件中包括指令)來產(chǎn)生沒有宏定義的、有條件的編譯指令此文件的含義與未預(yù)處理的源文件相同,但內(nèi)容不同。3.1.2.2編譯階段,預(yù)編譯器創(chuàng)建的工作:詞法分析將翻譯成等效的中間代碼表示或程序集代碼。 3.1.2.3優(yōu)化階段,優(yōu)化處理是編譯系統(tǒng)中比較困難的技術(shù)。 不僅編譯技術(shù)本身,而且與機器的硬件環(huán)境也有很

3、大關(guān)系的中間代碼的優(yōu)化,不依賴于具體的糾正算法器的主要工作是共同表示的刪除、環(huán)優(yōu)化(去代碼、強度衰減、變換環(huán)控制條件、已知量的整合等)、轉(zhuǎn)印傳播、不必要的代入的刪除目標(biāo)代碼的生成優(yōu)化是具體的計算機利用存儲在機器的各硬件寄存器中的相關(guān)變量的值,減少訪問存儲器的次數(shù)縮短目標(biāo)代碼, 必須將高效執(zhí)行的優(yōu)化程序集代碼在程序集中轉(zhuǎn)換為相應(yīng)的機械指令的目標(biāo)文件由段組成的代碼段此段主要包含程序指令。 此段通常是可讀的,可以執(zhí)行,但通常不可寫的。 數(shù)據(jù)段主要存儲程序使用的各種全局變量或靜態(tài)數(shù)據(jù)。 一般數(shù)據(jù)段是可讀、可寫和可執(zhí)行的。 3.1.2.4匯編階段,UNIX環(huán)境主要有三種目標(biāo)文件。 可重定位文件包含適合鏈

4、接到其他目標(biāo)文件以創(chuàng)建可執(zhí)行或共享的目標(biāo)文件的代碼和數(shù)據(jù)。 共享的目標(biāo)文件包含適合在兩個上下文中鏈接的代碼和數(shù)據(jù)。 第一個事件鏈接程序與可重定位文件和共享的目標(biāo)文件一起處理,以創(chuàng)建另一個目標(biāo)文件;第二個是動態(tài)鏈接程序?qū)⒘硪粋€可執(zhí)行文件與共享的目標(biāo)文件合并以創(chuàng)建進程映像可執(zhí)行文件包含操作系統(tǒng)可以創(chuàng)建和執(zhí)行進程的文件。 匯編程序生成的實際上是第一類目標(biāo)文件。 后者還需要其他一些處理,這就是鏈接程序的工作。 在3.1.2.5鏈接階段,鏈接程序?qū)⑾嚓P(guān)目標(biāo)文件相互連接,以確保所有這些目標(biāo)文件通過操作系統(tǒng)加載執(zhí)行而成為統(tǒng)一的整體。目標(biāo)文件或片段鏈接處理包括靜態(tài)鏈接動態(tài)鏈接、3.1.3 Makefile、m

5、akefile或用于自動編譯和鏈接的makefile可以記錄文件的信息、鏈接時需要重新編譯哪些文件3.2內(nèi)置c程序的編譯過程編譯鏈接地址,3將源代碼轉(zhuǎn)換為可執(zhí)行的二進制圖像的過程源文件被編譯或裝配,并且目標(biāo)文件(object file )可重定位程序(relocation programs ) 重新定位進程、3.2.2編譯器、編譯器、3.2.3鏈路、創(chuàng)建進程編譯鏈路地址、3.2.4地址、創(chuàng)建進程編譯鏈路地址、 3.3程序執(zhí)行A.out及其傳說段操作系統(tǒng)在A.out中做了什么c語言運行在A.out中做了什么函數(shù)調(diào)用時發(fā)生了什么Auto和static關(guān)鍵字Unix/Linux的堆棧段MS-DOS的

6、堆棧段,3.3.1 A.out -“assembler output”的縮寫a.out文件格式分析a.out文件包含七個部分:也可以理解為exec header文件頭) text segment 數(shù)據(jù)段文本重新定位段數(shù)據(jù)位置段符號表字符串表字符串表字符串表字符串表字符串表字符串表字符串在以前的UNIX系統(tǒng)中使用的可執(zhí)行文件格式,由ATT進行了修訂,基本上被ELF文件格式所取代。 段:是二進制文件的簡單區(qū)域,具體類型(例如符號表條目) 的所有相關(guān)信息段都可以容易地映射到鏈接器在運行時可以直接加載的對象段在運行程序的內(nèi)存區(qū)域中,這些段是運行程序中的一個內(nèi)存區(qū)域。 每個區(qū)域具有特定的目標(biāo)段特征的文本

7、段包含順序的指令數(shù)據(jù)段用于存儲初始化的全局變量和靜態(tài)變量以及它們的值棧段,其中該值棧段用于存儲傳遞給局部變量、臨時數(shù)據(jù)、函數(shù)的殘奧參數(shù); 3.3.4 C語言在a.out中做了什么運行時數(shù)據(jù)結(jié)構(gòu)種類堆?;顒佑涗洈?shù)據(jù)堆棧,3.3.4 C語言在a.out中做了什么堆棧堆棧包含單個數(shù)據(jù)結(jié)構(gòu)堆棧的動態(tài)存儲區(qū)域當(dāng)堆棧在提示堆棧中的當(dāng)前頂層位置處的角色堆棧為函數(shù)內(nèi)部聲明中的局部變量提供存儲空間以調(diào)用函數(shù)時,還可使用與堆棧存儲相關(guān)聯(lián)的一些維護信息堆棧作為臨時存儲區(qū)域。 3.3.4 C語言在a.out中做了什么,段的地址聲明如何找到這些段的變量并打印它們的地址printf (“堆棧頂點is near % pn”

8、,I ); 返回0; 3.3.5函數(shù)調(diào)用時發(fā)生了什么,跟蹤調(diào)用鏈c語言自動提供的服務(wù)等函數(shù)在調(diào)用結(jié)束了哪個函數(shù)實現(xiàn)機制:棧中的進程活動記錄進程活動記錄之后移動到調(diào)用點3.3.6 Auto和static關(guān)鍵字A.out及其傳說段操作系統(tǒng)在A.out中做了什么c語言在A.out中做了什么函數(shù)調(diào)用時發(fā)生了什么Auto和static關(guān)鍵字Unix/Linux的堆棧段MS-DOS的堆棧堆積在Linux BSS區(qū)域上,隨著程序繼續(xù)要求內(nèi)存而堆積,ps命令顯示的過程消耗內(nèi)存的大小也發(fā)生變化。堆棧(stack ) :是維持函數(shù)調(diào)用的系統(tǒng)堆棧,函數(shù)的殘奧參數(shù)和局部變量(靜態(tài)變量除外)存儲在此。 堆棧位于進程內(nèi)存區(qū)域的頂層段,隨著函數(shù)的調(diào)用向下增加。 當(dāng)函數(shù)回調(diào)時,堆棧向上回收,其中的關(guān)殘奧參數(shù)和變量數(shù)據(jù)無效。 3.3.8 MS-DOS的堆棧段。 DOS需要在創(chuàng)建可執(zhí)行文件時同時確定堆棧的大小,并且不能在運行時擴展。 確定堆棧大小的方法取決于所使用的編譯器。 在Microsoft編譯器中,程序員可以確定堆棧的大小作為鏈接器殘奧儀表。 堆棧nnn此殘奧定計量器指示Microsoft鏈接器將nn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論