嵌入式技術第三次課堂筆記

2021-10-03 23:56:52 字數 1588 閱讀 8304

今日課堂目標:

嵌入式linux開發工具 vim gcc gdb make

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

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

gdb偵錯程式:設定斷點、單步執行、除錯記憶體錯誤

make工程管理器:編寫makefile檔案

首先是linux文字編輯器,vim是功能最強大的文字編輯器,能達到拜託滑鼠效果。在vi–vim–**im中有命令列模式、插入模式(i)、低行模式(shift+:)。vim也有配置功能:/etc/vim/vimrc語句和set number語句。vim編譯完後用esc+shift+:+wq,w儲存q退出 !強制退出。

然後是gcc編譯器。gcc是乙個gnu工具,也是乙個交叉編譯器。首先,從原始檔到可執行檔案要經過預處理,編譯,彙編,鏈結幾個步驟,但是對於不用的系統,即使檔案內容相同,也不一定能都執行,例如電腦中編譯的檔案無法在手機上執行,所以要用交叉編譯器在當前cpu平台下編譯出其他cpu平台下可執行的**。或者在宿主機上編譯出能在目標機執行的**,也就是將核心原始碼進行交叉編譯。

預處理是標頭檔案展開,巨集替換和條件編譯,編譯是將預處理檔案編譯成彙編檔案,彙編是將彙編檔案編譯成目標檔案,鏈結則是建立符號表。若用「gcc -e加上檔名」,則只會預處理,用gcc -e hello.c >hello.i生成字尾為.i的檔案對於標頭檔案,若用「stdio.h」,則會現在當前目錄查詢,若找不到再到系統頭檔案目錄查詢,若用,則會從系統頭檔案目錄中進行搜尋。若gcc加上「-i加上路徑」,則會指定第三方路徑來尋找。若用gcc加上-d,則是從外部定義巨集;若用gcc加上-s,則生成彙編檔案並且會檢查語法錯誤;若用gcc加上-c,則會在彙編結束後停止;若用gcc加上-o,則可以重新命名可執行檔案;若用gcc加上-w,則會關閉警告,但是有時候警告是十分有用的,所以這條命令少用;若用gcc加上-o1,則會編譯器優化。

這節課最重要的是在gcc中建立靜態庫或者動態庫。庫檔案可以儲存函式與變數,但是只能使用但是不能看見其實現,可以理解成將**儲存在庫檔案中,將庫檔案給別人,別人可以使用但是並不能看見庫檔案裡的內容。靜態庫是在編輯階段載入,字尾是.a,而動態庫是在執行時載入,字尾為.so,載入就是將庫檔案的**載入到原始檔,所以動態庫和靜態庫生成的可執行檔案不同,也各有優缺點:(1)使用靜態庫生成的可執行檔案大於動態庫生成的可執行檔案;(2)使用靜態庫生成的可執行檔案難以公升級,使用動態庫生成的可執行檔案易於公升級;(3)使用靜態庫生成的可執行檔案執行速度塊,使用動態庫生成的可執行檔案執行速度慢;(4)使用靜態庫可執行檔案裡的**容易部署,動態庫難以部署。linux庫檔案的存放路徑也分為/lib:存放的系統執行所需要的庫;/usr/lib:存放的是程式執行所需要的庫。

製作靜態庫就是將需要儲存的函式所在檔案編譯生成目標檔案, 然後用ar製作工具來製作,**是「gcc rcs 庫名 目標檔名」,最後使用使用「gcc 原始檔 -l 庫名 -l 庫存放的路徑」。製作動態庫就是:

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

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

使用時就是:

cp libcal.so/usr/lib

gcc main.c -lcal

gcc main.c./libcal.so -o cal

嵌入式第三次作業

在嵌入式系統的程式設計中,常常要求在特定的記憶體單元讀寫內容,彙編有對應的mov指令,而除c c 以外的其它程式語言基本沒有直接訪問絕對位址的能力。在嵌入式系統的實際除錯中,多借助c語言指標所具有的對絕對位址單元內容的讀寫能力。以指標直接操作記憶體多發生在如下幾種情況 1 某i o晶元被定位在cpu...

嵌入式學習第三次作業

void calloc int num,int size 在記憶體中動態地分配 num 個長度為 size 的連續空間,並將每乙個位元組都初始化為 0。所以它的結果是分配了 num size 個位元組長度的記憶體空間,並且每個位元組的值都是0。void free void address 該函式釋放...

第三次課堂內容筆記

cin 物件 變數 輸入流 cout 物件 變數 輸出流 cerr 輸入 錯誤資訊 cout與cerr 輸出正常資訊用cout 錯誤資訊用cerr while 1 c語言中死迴圈 cout是有緩衝區的,型別是行緩衝 只有遇到 n才會輸出 cerr無緩衝區,只要有輸入,無論對錯一定輸出 clog無緩衝...