嵌入式開發(fā)精品課件_第1頁
嵌入式開發(fā)精品課件_第2頁
嵌入式開發(fā)精品課件_第3頁
嵌入式開發(fā)精品課件_第4頁
嵌入式開發(fā)精品課件_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式開發(fā)第1頁,共35頁,2022年,5月20日,3點8分,星期三3.1 開發(fā)環(huán)境和常用開發(fā)工具第2頁,共35頁,2022年,5月20日,3點8分,星期三VI 簡介Unix 下的全屏幕可視化編輯器由于其源代碼不可獲得,衍生了許多克隆版本nvi、elvis、vile、VIM.第3頁,共35頁,2022年,5月20日,3點8分,星期三vi的操作模式圖2-2 vi編輯器的三種工作模式第4頁,共35頁,2022年,5月20日,3點8分,星期三vi的常用命令命令說明功能鍵h向左移一個字符 I向右移一個字符 J向上移一個字符 k向下移一個字符 0移至該行之首 Home $移至該行之末 End 第5頁,共

2、35頁,2022年,5月20日,3點8分,星期三H 移至窗口的第一行 M 移至窗口的中間那行 L 移至窗口的最后一行 G 移至該文件的最后一行 nG 移至該文件的第 n 行 Ctrl+f 向后翻一頁 PageDown Ctrl+b 向前翻一頁 PageUp 移至該行的第一個非空白字符處 第6頁,共35頁,2022年,5月20日,3點8分,星期三命令 說明 功能鍵 x 刪除光標后的字符 Delete X 刪除光標前的字符 dd 刪除光標所在的行 ndd 刪除包括光標所在行的n行文本 r 修改光標所在字符 第7頁,共35頁,2022年,5月20日,3點8分,星期三R 進入替換狀態(tài),直到按Esc回到

3、命令模式為止 Insert s 刪除光標所在字符,并進入輸入模式 S 刪除光標所在的行,并進入輸入模式 u 恢復剛才被修改的文本 U 恢復光標所在行的所有修改 . 重復上一次命令的操作 第8頁,共35頁,2022年,5月20日,3點8分,星期三命令 說明 Y 復制當前行至編輯緩沖區(qū) nY 復制當前行開始的n行至編輯緩沖區(qū) p 將編輯緩沖區(qū)的內容粘貼到光標后的一行 P 將編輯緩沖區(qū)的內容粘貼到光標前的一行 a 從光標所在位置后面開始新增文本 第9頁,共35頁,2022年,5月20日,3點8分,星期三命令 命令說明A 從光標所在行最后面的地方開始新增文本 i 從光標所在位置前面開始插入文本 I 從

4、光標所在列的第一個非空白字元前面開始插入文本 o 在光標所在列下新增一行并進入輸入模式 O 在光標所在列上方新增一行并進入輸入模式 第10頁,共35頁,2022年,5月20日,3點8分,星期三命令 說明 :q 結束編輯 :q! 強制離開vi,放棄存盤 :w 存盤 :w filename 將編輯內容保存為名為filename的文件 :wq 存盤并退出 第11頁,共35頁,2022年,5月20日,3點8分,星期三GCC功能:高級語言(.c、.cpp、.F)匯編語言(.s)用戶界面,驅動各工具的執(zhí)行組成:一組可執(zhí)行程序 + 一組庫cpp、gcc、g+、g77 cpp0、cc1、cc1plus、f77

5、1 libgcc.a、crtbegin.o、crtend.o 支持多種語言和目標機第12頁,共35頁,2022年,5月20日,3點8分,星期三GNU工具鏈的組成GCCGNU Compiler CollectionBinutilsGNU binary utilitiesGlibcGNU C Library軟件開發(fā)的基本工具集合第13頁,共35頁,2022年,5月20日,3點8分,星期三Binutils功能:匯編語言(.s)目標文件可執(zhí)行程序查看二進制文件信息組成:一組可執(zhí)行程序as、ldobjdump、readelf、ar 支持多種目標機第14頁,共35頁,2022年,5月20日,3點8分,星期

6、三Glibc功能:提供語言和操作系統(tǒng)的標準庫函數組成:若干可執(zhí)行程序 + 大量庫ldd、iconv、localeISO C、POSIX、UNIX、GNU絕大部分與目標機無關第15頁,共35頁,2022年,5月20日,3點8分,星期三編譯工具鏈的基本工作流程Pre-processor(cpp / Gcc -E)Compiler(cc1 / Gcc -S)Assembler(as / Gcc -c)Linker(ld)hello.c(text)hello.i(text)hello.s(text)hello.o(binary)hello(binary)printf.o(binary)一個“hello

7、 world”程序的演變歷程第16頁,共35頁,2022年,5月20日,3點8分,星期三gcc最基本的用法是gcc options filenames基本參數說明: -E:只進行預處理 -S:只進行編譯;產生匯編代碼 -c:只編譯、匯編,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標文件,通常用于編譯不包含主程序的子程序文件-ooutput_filename:確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執(zhí)行文件a.out -v:打印程序的編譯過程,以及編譯器的版本 -g:產生符號調試工具

8、(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,必須加入這個選項 -o:對程序進行優(yōu)化編譯、連接 -O2:比-O更好的優(yōu)化-Dmacro或-Dmacro=defn其作用類似于源程序里的#define。 第17頁,共35頁,2022年,5月20日,3點8分,星期三-Idirname:將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數.C程序中的頭文件包含兩種情況 A)#include B)#include “myinc.h” 其中,A類使用尖括號(),B類使用雙引號(“ ”)。對于A類,預處理程序cpp在系統(tǒng)預設包含文件目錄(如/usr/include)

9、中搜尋相應的文件,而對于B類,cpp在當前目錄中搜尋頭文件,這個選項的作用是告訴cpp,如果在當前目錄中沒有找到需要的文件,就到指定的dirname目錄中去尋找。在程序設計中,如果我們需要的這種包含文件分別分布在不同的目錄中,就需要逐個使用-I選項給出搜索路徑 -Ldirname:將dirname所指出的目錄加入到程序函數檔案庫文件的目錄列表中,是在連接過程中使用的參數。在預設狀態(tài)下,連接程序ld在系統(tǒng)的預設路徑中(如/usr/lib)尋找所需要的檔案庫文件,這個選項告訴連接程序,首先到-L指定的目錄中去尋找,然后到系統(tǒng)預設路徑中尋找,如果函數庫存放在多個目錄下,就需要依次使用這個選項,給出相

10、應的存放目錄 -lname:在連接時,裝載名字為“l(fā)ibname.a”的函數庫,該函數庫位于系統(tǒng)預設的目錄或者由-L選項確定的目錄下。例如,-lm表示連接名為“l(fā)ibm.a”的數學函數庫第18頁,共35頁,2022年,5月20日,3點8分,星期三gcc 常用方式gcc 選項 源文件 目標文件$gcc hello.c o hello$gcc c hello.cpp o hello.o$gcc myapp.c L /home/silver/lib I /home/silver/include lnew o myapp第19頁,共35頁,2022年,5月20日,3點8分,星期三GDB調試器第20頁,

11、共35頁,2022年,5月20日,3點8分,星期三還可以用下面的方式來運行gdb:gdb filename其中,filename是要調試的可執(zhí)行文件。用這種方式運行gdb可以直接指定想要調試的程序。這和啟動gdb后執(zhí)行file filename命令效果完全一樣。也可以用gdb去檢查一個因程序異常終止而產生的core文件,或者與一個正在運行的程序相連。 第21頁,共35頁,2022年,5月20日,3點8分,星期三gdb支持很多的命令且能實現不同的功能。這些命令從簡單的文件裝入到允許你檢查所調用的堆棧內容的復雜命令, 下面列出了在使用gdb 調試時會用到的一些命令。1)file命令:裝入想要調試的

12、可執(zhí)行文件。 2)cd命令:改變工作目錄。 3)pwd命令:返回當前工作日錄。 4)run命令:執(zhí)行當前被調試的程序。 5)kill命令:停止正在調試的應用程序。 第22頁,共35頁,2022年,5月20日,3點8分,星期三6)list命令:列出正在調試的應用程序的源代碼。 7)break命令:設置斷點。 8)Tbreak命令;設置臨時斷點。它的語法與break相同。區(qū)別在于用tbreak設置的斷點執(zhí)行一次之后立即消失。 9)watch命令:設置監(jiān)視點,監(jiān)視表達式的變化。 10)awatch命令:設置讀寫監(jiān)視點。當要監(jiān)視的表達式被讀或寫時將應用程序掛起。它的語法與watch命令相同。 11)r

13、watch命令:設置讀監(jiān)視點,當監(jiān)視表達式被讀時將程序掛起,等侍調試。此命令的語法與watch相同。第23頁,共35頁,2022年,5月20日,3點8分,星期三12)next命令:執(zhí)行下一條源代碼,但是不進入函數內部。也就是說,將一條函數調用作為一條語句執(zhí)行。執(zhí)行這個命令的前提是已經run,開始了代碼的執(zhí)行。 13)step命令:執(zhí)行下一條源代碼,進入函數內部。如果調用了某個函數,會跳到函數所在的代碼中等候一步步執(zhí)行。執(zhí)行這個命令的前提是已經用run開始執(zhí)行代碼。 14)display命令:在應用程序每次停止運行時顯示表達式的值。15)info break命令:顯示當前斷點列表,包括每個斷點到

14、達的次數。第24頁,共35頁,2022年,5月20日,3點8分,星期三16)info files命令:顯示調試文件的信息。 17)info func命令:顯示所有的函數名。 18)info local命令:顯示當前函數的所有局部變量的信息。 19)info prog命令:顯示調試程序的執(zhí)行狀態(tài)。 20)print命令;顯示表達式的值。 21)delete命令:刪除斷點。指定一個斷點號碼,則刪除指定斷點。不指定參數則刪除所有的斷點。 22)Shell命令:執(zhí)行Linux Shell命令。 23)make命令:不退出gdb而重新編譯生成可執(zhí)行文件。 24)Quit命令:退出gdb。第25頁,共35

15、頁,2022年,5月20日,3點8分,星期三3、6 Make工程管理器一、Makefile基本結構一個Makefile文件主要含有一系列的規(guī)則,每條規(guī)則包含以下內容。一個目標(target),即make最終需要創(chuàng)建的文件,如可執(zhí)行文件和目標文件;目標也可以是要執(zhí)行的動作,如“clean”。一個或多個依賴文件(dependency)列表,通常是編譯目標文件所需要的其他文件。 一系列命今(command),是make執(zhí)行的動作,通常是把指定的相關文件編譯成目標文件的編譯命令,每個命令占一行,且每個命令行的起始字符必須為TAB字符。第26頁,共35頁,2022年,5月20日,3點8分,星期三Make

16、file規(guī)則的一般形式如下:target:dependency dependency(tab)第27頁,共35頁,2022年,5月20日,3點8分,星期三例如有兩個文件hello.c和hello.h:/*hello.c*/int main() printf(firstn);return 0;/* hello.h*/#include 創(chuàng)建的目標為可執(zhí)行程序hello,則對應的Makefike寫為:hello:hello.c hello.hgcc hello.c -o hello第28頁,共35頁,2022年,5月20日,3點8分,星期三二、Makefile變量例如,有以下的Makefile文件:

17、test:prog.o code.ogcc o test prog.o code.oprog.o:prog.c prog.h code.hgcc c prog.c o prog.ocode.o:code.c code.hgcc c code.c o code.oclean:rm f *.o 第29頁,共35頁,2022年,5月20日,3點8分,星期三變量的主要作用如下: 保存文件名列表。保存可執(zhí)行命令名。 保存編譯器的參數。定義變量的語法:VARNAME=string使用時,把變量用括號括起來,并在前面加上$符號,就可以引用變量的值: $VARNAME第30頁,共35頁,2022年,5月20日

18、,3點8分,星期三現在利用變量把前面的Makefile重寫一遍:OBJS=prog.o code.oCC=gcctest:$ OBJS $ CC o test $ OBJS prog.o:prog.c prog.h code.h$ CC c prog.c o prog.ocode.o:code.c code.h$ CC c code.c o code.oclean:rm f *.o 第31頁,共35頁,2022年,5月20日,3點8分,星期三Makefile中還有一些預定義變量和自動變量,但是看起來并不像自定義變量那樣直觀。P89表3.15給出了常見的自動變量。除了自動變量外,Makefile中還有一些預定義的內部變量,用于定義編譯命令名、編譯參數等,如表3.14所示第32頁,共35頁,2022年,5月20日,3點8分,星期三現在利用自動變量把前面的Makefile重寫一遍:OBJS=prog.o cod

溫馨提示

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

評論

0/150

提交評論