嵌入式設計課程(3)

2021-10-03 21:47:54 字數 2104 閱讀 8585

嵌入式linux開發工具及課程目標

vim(文字編輯器)學會使用和如何配置vim

gcc(編譯器)學會製作動態庫和靜態庫及使用區別

gdp(偵錯程式)設定斷電、單步執行、除錯記憶體錯誤

make(工程管理器)編寫makefile檔案

vi—vim—**im:命令列模式nyy\p\ndd\u、插入模式i、a、底行模式:+shift

(進入i或者a 退出esc 儲存:wq 複製 貼上 刪除 恢復yy p dd u)

如何配置vim?/etc/vim/vimrc

ide(整合開發環境)—vscode

嵌入式linux開發工具-gcc

編譯器:gcc(gnu cc)

1、gcc特點(gnu工具、交叉編譯器)

什麼是交叉編譯器?

為什麼需要交叉編譯?

交叉編譯:在當前cpu平台下編譯出在其它在其它cpu平台下可執行的**

原始檔到可執行檔案需要經歷哪幾個步驟?靜態庫和動態庫的製作

1、什麼是庫檔案?

儲存函式和變數(倉庫)

特點:儲存的函式與變數,只能使用但不能看到其實現

2、linux庫檔案:

靜態庫.a:在編譯階段載入;(將庫檔案的**載入到原始檔)

動態庫.so:在執行時載入;

生成的可執行檔案存在區別(優缺點)

1.使用靜態庫生成的可執行檔案》動態庫生成的可執行檔案(程式執行占用的記憶體較多)

2.使用靜態庫生成的可執行檔案難以公升級;使用動態庫生成的可執行檔案易於公升級;

3.使用靜態庫生成的可執行檔案執行速度快;使用動態庫生成的可執行檔案執行速度慢

4.使用靜態庫可執行檔案裡的**容易部署,動態庫難以部署;

3、linux庫檔案存放路徑:(自動搜尋路徑)

\lib:存放的系統執行所需要的庫

\usr\lib:存放的是程式執行所需要的庫

如何製作靜態庫?

1、將需要儲存的函式所在的檔案編譯生成目標檔案gcc -c add.c —->add.o

2.靜態庫的製作工具:ar

ar rcs(不存在就建立,存在就更新)庫名 目標檔名

ar rcs libadd.a add.o

(cp libadd.a /lib or /usr/lib

3.使用

gcc 原始檔 -l庫名 -l庫存放的路徑

gcc main.c -ladd -l. -o add

如何製作動態庫?

gcc -shared -fpic 原始檔 -o libcal.so

gcc -shared -fpic add.c sub.c -o libcal.so

作業gcc -static這個static作用??

1、隱藏

當同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性

2、保持變數內容的持久:儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化, (static修飾的區域性變數只有在整個程式結束的時候才會自動釋放。若下次呼叫該區域性變數所在的函式時,不需要對它重新宣告,且會保留上一次呼叫存入的值。)

3、 static變數不初始化時,預設初始化為0

static的第三個作用是預設初始化為0。其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些時候這一特點可以減少程式設計師的工作量。

static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變數存放在靜態儲存區,所以它具備永續性和預設值0。

預習gdb make

linux偵錯程式-gdb使用

1.背景

程式的發布方式有兩種,debug模式和release模式

linux gcc/g++出來的二進位制程式,預設是release模式

要使用gdb除錯,必須在源**生成二進位制程式的時候, 加上 -g 選項

2. 開始使用

gdb binfile 退出: ctrl + d 或 quit 除錯命令:

嵌入式設計課程(4)

偵錯程式 gdb gun計畫的工具 核心除錯kgdb 程式的錯誤分類 編譯時錯誤 語法錯誤 執行時錯誤 記憶體問題,邏輯問題 gdb的功能 1.執行程式 2.設定斷點 3.檢視變數的值 hello.c gcc g hello.c o hello gdb hello 使用 tui layout asm...

3 24嵌入式設計課程

嵌入式linux系統開發 檔案 程序 執行緒 網路 20 嵌入式系統移植8h 嵌入式驅動開發8h 自動生成 cmake autotool 嵌入式linux開發工具 shell程式設計 指令碼 批處理 linux系統運維工程師 嵌入式系統開發 系統移植 shell 1.命令解析器 將使用者輸入的命令解...

嵌入式課程設計日誌

第二天日誌 姓名 楊戴文 日期 9.11 今日學習任務 在linux作業系統中完成初始化棧,進棧,出棧,判斷棧是否空,獲取棧頂元素,清空棧 今日任務完成情況 老師講解了各種資料結構儲存方式,練習了初始化棧,進棧,出棧,判斷棧是否空,獲取棧頂元素,清空棧。複習了昨天的各種運算子,我是一步步跟著老師走的...