嵌入式課程拓展(三)

2021-10-03 22:23:18 字數 2224 閱讀 2292

靜態鏈結庫檔案

static表示的是編譯的時候禁止呼叫動態庫,此時就是說完全編譯出的東西是比較大的

gdb的功能:

l 設定斷點

l 監視程式變數的值

l 程式的單步執行

l 顯示、修改變數的值

l 顯示、修改暫存器

l 檢視程式的堆疊情況

l 遠端除錯

gdb除錯過程:

1、程式經過預處理後,即進入編譯階段,進入編譯階段,首先宣告編譯:

2、格式:gcc-o test test.c -g

3、進入編譯:gdb test

4、顯示需要編譯除錯的源程式:l(list)//list filename

5、設定斷點:b(break)行號

6、檢視設定的斷點:info b

7、執行除錯程式:run

8、跳到下乙個斷點:c(continue)

9、單步執行的話使用:n(next)/s(step into)跳到函式體 //區別在與:next執行函式體,而step不執行函式體

10、除錯過程中檢視某個變數的變化:print i (每次都要手動設定)//display i(設定一次一直尾隨,直到用「undisplay 變數標號」 停止)

11、退出當前的除錯使用finish 跳出函式

12、清楚斷點 clear 行號

13、delete 斷點資訊序號// 刪除所有斷點或設定的要刪除的斷點

14、退出除錯 q

15、b num if i=20 設定斷點的觸發條件

16、condition num i==50 改變斷點的觸發條件

17、gdb中源**檢視命令

list /l 行號或函式名 //檢視指定位置**

list //顯示程式第linenum行的周圍的源程式

list //顯示函式名為function的函式的源程式

list // 顯示當前行後面的源程式

list filename:funtion //顯示哪個檔案中的哪個函式的源程式

eg: list src/fun1.c:fun1

list filename:linenum //哪個檔案的哪一行周圍的源程式

eg:list src/fun1.c:1

make 可自動決定乙個大程式中哪些檔案需要重新編譯,並發布重新編譯它們的命令。

因為c語言程式更具有代表性,所以我們的例子基於c語言程式,但make並不是僅僅能夠處理c語言程式,它可以處理那些編譯器能夠在shell命令下執行的的各種語言的程式。事實上,gnu make不僅僅限於程式,它可以適用於任何如果一些檔案變化導致另外一些檔案必須更新的任務。

如果要使用make,必須先寫乙個稱為makefile的檔案,該檔案描述程式中各個檔案之間的相互關係,並且提供每乙個檔案的更新命令。在乙個程式中,可執行程式檔案的更新依靠obj檔案,而obj檔案是由原始檔編譯得來的。

一旦合適的makefile檔案存在,每次更改一些原始檔,在shell命令下簡單的鍵入:

make

就能執行所有的必要的重新編譯任務。make程式根據makefile檔案中的資料和每個檔案更改的時間戳決定哪些檔案需要更新。對於這些需要更新的檔案,make基於makefile檔案發布命令進行更新,進行更新的方式由提供的命令列引數控制。

makefile

當我們要對多個檔案進行編譯成乙個可執行檔案時,需要使用makefile。它就像乙個批次處理的編譯指令碼,可實現自動化編譯,一旦寫好,只需要乙個make命令,整個過程就會自動編譯。

1. makefile的規則

makefile是由規則來實現的,即makefile檔案內容的主體由很多規則構成,每一條規則都由三部分組成:

(1)目標:目標定格寫,後面是冒號(冒號後面是依賴)

(2)依賴:依賴是用來產生目標的原材料。

(3)命令:命令前面一定是tab,不能是頂格,也不能說多個空格。命令就是要生成那個目標需要做的動作。

格式

目標: 依賴

tab鍵 命令

2. make執行流程

(1)查詢當前目錄下的makefile檔案;

(2)初始化makefile檔案中的變數;

(3)分析makefile中的所有規則;

(4)為所有的目標檔案建立依賴關係;

(5)根據依賴關係,決定哪些檔案要重新生成;

(6)執行生成命令;

嵌入式課程拓展 第四周

1.makefile gnu make的工作分為兩個階段。在第一階段,make讀取makefile檔案 內建變數及其值 隱含規則和具體規則 構造所有目標的依賴關係以及所有目標各自的依賴等。在第二階段,make決定需要重新構造的目標並使用必要的規則進行工作。make工作第一階段發生的擴充套件是立即擴充...

3 17嵌入式設計(拓展)

1 單鏈表 鍊錶是一種常用的組織有序資料的資料結構,它通過指標將一系列資料節點連線成一條資料鏈,是線性表的一種重要實現方式。相對於陣列,鍊錶具有更好的動態性,建立鍊錶時無需預先知道資料總量,可以隨機分配空間,可以高效地在鍊錶中的任意位置實時插入或刪除資料。鍊錶的開銷主要是訪問的順序性和組織鏈的空間損...

3 31嵌入式設計(拓展)

基本介紹 程式是由指令構成的序列,執行程式就是按指令序列逐條執行指令。一旦把程式裝入主儲存器中 簡稱主存 就可以由cpu自動地完成從主訪問指令和執行指令的任務。主要功能 順序控制 這是指控制程式中指令的執行順序。程式中的各指令之間是有嚴格順序的,必須嚴格按程式規定的順序執行,才能保證計算機工作的正確...