16 華清嵌入式 GNU工具

2021-09-29 08:25:10 字數 2062 閱讀 3477

gnu工具

一.gnu工具分類

編譯工具:源程式編譯為乙個可執行程式(gcc)

除錯工具:對執行程式進行原碼或者彙編除錯(gdb)

軟體工程工具:協助多人開發或大型軟軟體專案管理

其他工具:鏈結器或者格式轉換器等。

.gcc

1.gcc:執行效率高,可編譯多種語言。

2.gcc編譯器主要元件:

分析器:c轉換成彙編

彙編器:彙編轉換為cpu位元組碼

鏈結器:鏈結成可執行檔案

標準c庫::核心c函式由c庫來提供。

3.gcc基本用法

命令格式:gcc [選項] [檔名]

(1) 無選項編譯鏈結

用法:gcc test.c

(2)選項 -o

用法:gcc test.c -o test

(3) 選項 -e

用法:gcc -e test.c -o test.i

作用:將test.c預處理輸出test.i檔案。

(4) 選項 -s

用法:gcc -s test.i

作用:將預處理輸出檔案test.i彙編成test.s檔案。

(5) 選項 -c

用法:gcc -c test.s

作用:將彙編輸出檔案test.s編譯輸出test.o檔案。

(6) 無選項鏈結

用法:gcc test.o -o test

(7) 選項-o

用法:gcc -o1 test.c -o test

作用:使用編譯優化級別1編譯程式。級別為1~3,級別越大優化效果越好,但編譯時間越長。

4.gcc編譯過程

(1)預處理階段:

將#開頭的語句進行乙個處理(標頭檔案展開,巨集替換,條件編譯**保留),生成的檔案以.i結尾(之前我們也通過檢視.i檔案確定包含了哪些檔案及檔案的路徑),想看到.i檔案需要加-e選項

gcc -e test.c -o test.i

(2)編譯階段:

將.i檔案編譯成彙編檔案 .s (x86彙編或者arm彙編等)

gcc -s test.i -o test.s

(3)彙編處理階段

將.s彙編檔案生成.o目標檔案

gcc -c test.s -o test.o

(4)鏈結階段

乙個工程會有多個.c檔案,也就是會生成多個.o。將多個.o和庫函式共同鏈結成乙個執行檔案。

gcc test.o -o test -lm

三.gdb除錯工具(類似於我們平時用的整合開發環境裡的debug)

可以打斷點,可以單步執行,可以檢視變數資訊,不過之前的按鈕操作,現在都是通過指令來進行的。

1.想要使用gdb,首先在檔案編譯的時候加 『-g』

gcc -g test.c -o test

gdb test

2.除錯命令

gdb test後會進入除錯介面

(gdb) l //l為在gdb模式下檢視原始碼,l一次只能看10行

(gdb)b 6 //第六行設定斷點

(ddb)info b //檢視斷點資訊

(gdb)del 1 //刪除第1個斷點

(gdb)q  //退出除錯

(gdb) r //執行**到斷點處

(gdb) p kk //檢視kk變數的值

(gdb) n(或s) //單步執行,n和s都是走一行,但是s能進入函式內部

(gdb) c //直接從當前斷點執行到下乙個斷點(設定多個斷點常用)

當在除錯的時候,需要命令列傳入引數怎麼辦?

(gdb) set args 12 34 //設定12,34 引數

嵌入式GNU彙編常用指令

特殊暫存器 cpsr和spsr 除了push,pop還有stmfd,ldmfd。stm 和 ldm 就是多儲存和多載入,arm 使用的 fd 型別 的堆疊,fd 是 full descending 的縮寫,即滿遞減的意思,因為fd堆疊是向下增長的。stmfd sp r0 r3,r12 入棧 stmf...

嵌入式複習16

第十六天 1.基於tcp協議的通訊模型 1.1 通訊模型 伺服器 1 建立socket socket函式 2 準備通訊位址 使用結構體型別 3 幫id那個socket和通訊位址 bind函式 4 監聽 listen函式 5 響應客戶端的連線請求 accept函式 6 關閉socket close函式...

GNU工具開發基於ARM嵌入式系統的方法

當 前,arm公司的32位risc處理器,以其核心耗電少 成本低 功能強 特有16 32位雙指令集,已成為移動通訊 手持計算 多 數字消費等嵌入式 解決方案的risc標準,市場占有率超過了75 多家公司都推出了自己的基於arm核心的處理器產品,越來越多的開發人員開始了針對arm平台的開發。通常開發人...