第3章 嵌入式程式設計基礎知識

2021-08-26 08:40:40 字數 3731 閱讀 1165

乙個c/c++檔案要經過預處理(preprocessing)、編譯(compilation)、彙編(assembly)和連線(linking)才能變成可執行程式

字尾名

語言種類

後期操作

.cc源程式

預處理、編譯、彙編

.cc++源程式

預處理、編譯、彙編

.ccc++源程式

預處理、編譯、彙編

.cxx

c++源程式

預處理、編譯、彙編

.mobjective-c源程式

預處理、編譯、彙編

.i預處理後的c檔案

編譯、彙編

.ii預處理後的c++檔案

編譯、彙編

.s組合語言源程式

彙編.s

組合語言源程式

預處理、彙編

.h預處理器檔案

通常不出現在命令列上

- .o: 目標檔案(object file,obj檔案)

- .a: 歸檔庫檔案(archive file)

引數說明

-c預處理、編譯和彙編原始檔,但是不做連線

-s編譯後即停止,不進行彙編

-e預處理後即停止

-o制定輸出檔名

-v顯示製作gcc工具自身時的配置命令

引數說明

object-file-name

如果某些檔案沒有特別明確的字尾,就認為它們是obj檔案或庫檔案

-llibrary

連線名為library的庫檔案

-nostartfiles

不連線啟動標準啟動檔案,標準庫檔案仍然正常使用

-nostdlib

不連線系統標準啟動檔案和標準庫檔案,只把制定的檔案傳遞給聯結器

-static

在支援動態連線的系統上阻止連線共享庫

-shared

生成乙個共享obj檔案,可以和其它obj檔案連線產生可執行檔案

-xlinker option

把選項option傳遞給聯結器。可以用來傳遞系統特定的連線選項,gcc無法識別這些選項。如果需要傳遞攜帶引數的選項,必須使用兩次」-xlinker」,一次傳遞選項,另一次傳遞其引數

-wl, option

把選項option傳遞給聯結器。如果option中含有逗號,就在逗號處分割成多個選項。

-u使聯結器認為取消了symbol的符號定義,從而連線庫模組以取得定義

引數說明

input-file、outfile

如果未指定outfile檔案,將生產檔案覆蓋為input-file

-i bfdname

指明原始檔的格式

-o bfdname

使用指定的格式來輸出檔案

-f bfdname

同時指明原始檔、目的檔案的格式

-r sectionname

從輸出檔案中刪除所有名為sectionname的段

-s或–strip-all

不從原始檔中複製重定位資訊和符號資訊到目標檔案中

-g或–strip-debug

不從原始檔中複製除錯符號到目標檔案中

引數說明

-b bfdname

指定目標碼格式

-d反彙編可執行段

-d反彙編所有段

-eb或-el

指定位元組序

-f顯示檔案的整體頭部摘要資訊

-h顯示目標檔案各個段的頭部摘要資訊

-i顯示支援的目標檔案格式和cpu架構

-j name

僅顯示指定section的資訊

-m machine

指定反彙編目標檔案時使用的架構

編號低的暫存器對應記憶體中的低位址單元

編號高的暫存器對應記憶體中的高位址單元

cpsr條件標誌位n、z、c、v分別表示negative、zero、cary、overflow

條件碼

助記符含義

cpsr中條件標誌位

0000

eq相等

z = 1

0001

ne不相等

z = 0

0010

cs無符號數大於/等於

c = 1

0011

cc無符號數小於

c = 0

0100

mi負數

n = 1

0101

pl非負數

n = 0

0110

vs上溢位

v = 1

0111

vc沒有上溢位

v = 0

1000

hi無符號數大於

c = 1且z = 0

1001

ls無符號數小於等於

c = 0或z = 1

1010

ge帶符號數大於等於

n = 1,v = 1或n = 0, v = 0

1011

lt帶符號數小於

n = 1,v = 0或n = 0, v = 1

1100

gt帶符號數大於

z = 0且n = v

1101

le帶符號數小於/等於

z = 1或 n != v

1110

al無條件執行

-1111

nv從不執行

-暫存器

別名使用規則

r15pc

程式計數器

r14lr

連線暫存器

r13sp

資料棧指標

r12ip

子程式內部呼叫的scratch暫存器

r11v8

arm狀態區域性變數暫存器8

r10v7、sl

arm狀態區域性變數暫存器7,在支援資料棧檢查的atpcs中為資料棧限制指標

r9v6、sb

arm狀態區域性變數暫存器6,在支援rwpi的atpcs中為靜態基址暫存器

r8v5

arm狀態區域性變數暫存器5

r7v4、wr

arm狀態區域性變數暫存器4,thumb狀態工作暫存器

r6v3

arm狀態區域性變數暫存器3

r5v2

arm狀態區域性變數暫存器2

r4v1

arm狀態區域性變數暫存器1

r3a4

引數/結果/scratch暫存器4

r2a3

引數/結果/scratch暫存器3

r1a2

引數/結果/scratch暫存器2

r0a1

引數/結果/scratch暫存器1

所謂資料棧的增長就是移動棧指標。當棧指標指向棧頂元素(最後乙個入棧的資料)時,稱為full棧;當棧指標指向棧頂元素(最後乙個入棧的資料)相鄰的乙個空的資料單元時,稱為empty棧

綜合這兩個特點,資料棧可以分為以下4種:

fd:full descending,滿遞減

ed:empty descending,空遞減

fa:full ascending,滿遞增

ea:empty ascending,空遞增

atpcs規定資料棧為fd型別,並且對資料棧的操作是8位元組對齊的。使用s***b/ldmia批量記憶體訪問指令來操作fd資料棧

使用s***b命令往資料棧中儲存內容時,先遞減sp指標,再儲存資料;使用ldmia命令從資料棧中恢復資料時,先獲取資料,再遞增sp指標,sp指標總是指向棧頂元素。

嵌入式基礎知識

嵌入式處理器的分類包括三種,分別是 嵌入式微控制器 嵌入式微處理器 數字訊號處理器 安裝linux系統對硬碟分割槽時,必須有兩種分割槽型別 檔案系統分割槽 和交換分割槽 在vivi狀態下,顯示系統的分割槽命令是 part show。鏈結分為 符號鏈結 和硬鏈結 當gcc僅對原始檔進行編譯而不鏈結生成...

嵌入式系統基礎知識 了解嵌入式系統

嵌入式系統用於大量電子裝置,它們的設計涉及到硬體和軟體技術。隨著計算機技術的進步,其技術也越來越多地嵌入到越來越多的電子產品中。嵌入式系統提供的功能是使電子裝置具有比僅使用硬體技術時更大的能力。因此,嵌入式系統可用於各種電子裝置和小工具中。從電子計時器等專案中的少量處理,到遊戲控制台甚至主要工廠和其...

嵌入式系統基礎知識 了解嵌入式系統

嵌入式系統用於大量電子裝置,它們的設計涉及到硬體和軟體技術。隨著計算機技術的進步,其技術也越來越多地嵌入到越來越多的電子產品中。嵌入式系統提供的功能是使電子裝置具有比僅使用硬體技術時更大的能力。因此,嵌入式系統可用於各種電子裝置和小工具中。從電子計時器等專案中的少量處理,到遊戲控制台甚至主要工廠和其...