嵌入式第四次課堂總結

2021-10-04 01:19:05 字數 2972 閱讀 6569

偵錯程式:gdb

1.gnu計畫的工具;核心除錯kgdb

2.程式的錯誤分類:編譯時錯誤:語法錯誤;執行時錯誤:記憶體錯誤,邏輯錯誤

3.gdb的功能:執行程式;設定斷點;檢視變數的值;

4.gdb的用法:hello.c gcc -g hello.c -o hello gdb hello(可執行檔案)

gdb自帶命令:run //執行程式; list //檢視原始碼; break //設定斷點

gdb圖形化:gdb 檔名 --tui

gdb圖形化使用的命令:

–tui:

layout asm //顯示彙編

layout src //顯示原始碼

layout split //分開顯示

run //執行程式

list //檢視原始碼

finish

continue//結束當前斷點,接著往下執行,直到遇到下乙個斷點;

break+行號 //設定斷點

break+函式名//在函式呼叫處停下來

break+行號 if 條件//

info break //檢視斷點資訊

delete +斷點編號 //刪除斷點

enable +斷點編號

disable+斷點編號 //關掉斷點

單步執行:

step :可以進入子函式

next :不可以進入子函式

工程管理器:make

1.工程管理器:編譯很多個檔案(型別不同,存放在不同目錄,資源檔案使用)組成的軟體**結構

單個.c的編譯–gcc hello.c -o hello

假設有10000個.c(分別儲存在100個不同目錄)——

利用make可以實現自動編譯:①根據makefile檔案內容進行(手動建立 touch makefile)

②根據原始檔的時間戳來判斷檔案是否需要編譯

make-makefile的關係:make讀取makefile裡面的內容進行編譯

2.如何編譯makefile 檔案?

makefile是指令碼檔案(批處理)

makefile語法:目標,依賴,命令

目標:依賴

按下tab鍵 輸入命令

執行命令,依賴這個檔案,最終生成目標

makefile執行順序:自上向下,當你的目標依賴的檔案又是有乙個目標時,會先跳轉到該目標去執行相關命令。

make+目標名:從該目標開始自上而下執行;

偽目標:執行命令,不生成對應的檔案;

定義偽目標: .phony:clean install(目標名)

3.使用偽目標的好處:

執行make命令,只能使用一次,倘若再次執行會出現提示,即目標檔案和可執行檔案都已存在,不能執行第二次。解決辦法:可以修改原始檔,或者刪除 rm -f 目標檔案和可執行檔案;此時偽目標就可以解決這些麻煩;

舉個例子,編寫makeflie時:

.phony:clean //定義clean偽目標

clean:

rm -f hello.o hello // 實現的命令,刪除檔案

資料夾下不會生成clean檔案,make clean 就可以解決多次執行make命令的問題;

4.makefile裡的命令:

echo:相當於在終端上輸出字串

make -f 檔案 :指定檔案,生成makefile檔案

每條命令前面加@:去掉命令回顯;

$ @:代表此目標下,目標體的依賴;

obj:定義變數,例如: obj=hello.o

hello:$(obj) #取變數的值

@gcc $(obj) -o hello

5.makefile的編寫小型計算器,實現加減乘除:

obj=main.o add.o sub.o mul.o div.o

cal: $(obj)

gcc $(obj) -o $@

main.o:main.c

gcc -c main.c

add.o:add.c

gcc -c add.c

sub.o:sub.c

gcc -c sub.c

mul.o:mul.c

gcc -c mul.c

div.o:div.c

gcc -c div.c

6.為什麼將.c檔案先編譯生成.o檔案,再由.o檔案生成可執行檔案

前提:原始檔到可執行檔案需要經歷,預處理,編譯,彙編,鏈結4個過程;

假設每個過程需要1s,

gcc hello.c -o hello //需要經歷4s

在makefile裡編寫:

cal:main.c add.c sub.c div.c mul.c

gcc *.c -o cal

執行這個命令需要經歷20s;

假設修改了add.c檔案,在這種情況下,執行一次make都需要經歷20s;

但是如果先生成.o檔案。這種情況下,第一次執行需要20s;但第二次編譯只需:4+4s=8s;

(其中4s是add.c重新執行預處理到鏈結的時間,而4s是這4個檔案只要執行鏈結的時間);

所以:先生成.o檔案可以很好地優化程式,減少時間

7.功能目錄管理軟體**

makefile的分類:

1.總控makefile:進入各個功能目錄執行make,並將所有.o檔案鏈結成可執行檔案;

2.功能目錄makefile:將功能目錄下的原始檔編譯生成目標檔案.o

3.scripts目錄標頭檔案makefile:定義變數,供其他makefile使用

閱讀makefile的順序:先是scripts目錄標頭檔案makefile,然後是總控makefile,最後是功能目錄makefile;

嵌入式c第四次作業

一,結構體的引數傳遞 首先結構體做函式引數有三種傳遞方式 一是傳遞結構體變數,這是值傳遞,二是傳遞結構體指標,這是位址傳遞,三是傳遞結構體成員,當然這也分為值傳遞和位址傳遞。以傳引用呼叫方式傳遞結構比用傳值方式傳遞結構效率高。以傳值方式傳遞結構需要對整個結構做乙份拷貝。下面看乙個列子,student...

嵌入式C學習第四次任務

include include using namespace std struct student void outcome student s 引用傳遞不會進行記憶體重新分配,因此和指標傳參類似,效率很高 void outcome student s 引用傳參 void outcome stud...

第四次總結

學習上 上星期末進行了小組考核,由於網路程式設計那一章節沒用心看用心進,導致考核的時候關於網路程式設計的題都不會做。關於程式設計題的第二題我只做出來一點,在對list集合新增資料的時候實參寫錯了,導致資料新增不進去,然後下面的都寫不了。考試結束後,用了一段時間把第二題寫完了,附加題也是考後才做對。然...