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平台的開發。通常開發人...