嵌入式linux學習筆記三 筆試面試題

2021-06-29 10:11:30 字數 1876 閱讀 2051

linux程序間通訊方式:管道和訊號

static的作用:1.隱藏。只能在本程式中使用,在編譯多個檔案時所有為static的函式和全域性變數具有全域性可見性。

若加了這個static就會對其他原始檔隱藏,利用這一特性可以在不同的檔案中定義相同名字的變數和函式。

2.保持變數內容的持久.儲存在靜態儲存區里的變數會在程式剛開始執行時就完成初始化,也是唯一的一次

初始化。

3.預設初始化為0;

怎樣定義乙個全域性變數?

全域性變數是在函式外面定義的變數,它不屬於任何乙個函式,而屬於乙個原始檔,其作用域是從定義該變數位置開始至原始檔結束

全域性變數被定義以後系統會為它分配記憶體,並且可以被其他模組通過c語言中關鍵字extern呼叫。函式中使用全域性變數一般需要做說明,

若這個全域性變數在函式之前定義的則可以不用宣告。

全域性變數和static變數儲存在靜態儲存區里

linux編譯出的.o檔案和可執行檔案是什麼檔案?.a檔案又是什麼檔案?

.o檔案是可重定位目標檔案,雖然打包了機器語言指令,但他還需要與其他的庫做鏈結生成可執行檔案,然後才能載入到記憶體中執行。

.a檔案是archive,靜態庫檔案,將若干個.o檔案打包生成,作為乙個庫為外部程式提供介面和函式

.global _start

_start:

ldr r0,=0***xx        //將位址0***x賦給r0,    ldr r0,0***xx//把位址0***xx處的值賦給r0

orr r0,r0,#0x13

//邏輯或運算,r0=r0|0x13 即把第1/2/5位置1

mcr p15,0,r0,c15,c2,4 

mcr指令是將arm處理器中的暫存器中的資料傳送到協處理器的暫存器中,p15,0為格式要求,r0為源暫存器,c15為目標暫存器,c2為附加目標暫存器,

用於區分同乙個編號的不同物理暫存器?(不懂什麼意思)

ldr r0,=0******

mov r1,#0

str r1,[r0]  將r1的值寫到r0中所存記憶體位址處

重定位:

一上電,硬體自動把nandflash中的前8k內容原原本本的拷貝到處理器的片內記憶體中(sram),然後從零開始執行,而程式中的鏈結位址為0x5***x(記憶體位址)

此時ddr可以使用,然後重定位,把**從片內記憶體中複製到ddr中,然後清楚bss段,因為bin檔案中是不包含bss段的,此時程式位於其鏈結位址處了,繼續執行。

addr r0,_start //偽彙編指令,取_start的當前位址到r0中

ldr r1,=_start //也是偽彙編指令,取_start的鏈結位址到r1中

ldr r2,=bss_start

cmp r0,r1

beq clean_bss  //比較_start的鏈結位址和當前位址,若相等則執行clean_bss,若不相等繼續執行下邊的**

copy_loop:

ldr r3,[r0],#4  //將r0中的值寫到r3中,然後r0中加4

str r3,[r1],#4

cmp r1,r2       //比較r1,r2,若不相等則執行bne copy_loop

bne copy_loop

clean_bss

ldr r0,=bss_start

ldr r1,=bss_end

mov r3,#0x

cmp r0,r1

beq on_addr

clean_loop

str r3,[r0],#4

cmp r0,r1

bne clean_loop

on_ddr

//執行到這裡都處於片內記憶體中

ldr pc,=main     //pc等於main函式的鏈結位址,直接跳到ddr中執行main函式

嵌入式Linux學習筆記

嵌入式linux學習筆記 學習 一 linux的優勢 1 廣泛的硬體支援 linux能夠支援x86 arm mips alpha powerpc等多種體系結構,目前已經成功移植到數十種硬體平台,幾乎能夠執行在所有流行的cpu上。linux有著異常豐富的驅動程式資源,支援各種主流硬體裝置和最新硬體技術...

嵌入式linux學習筆記

1 溢位 兩個數相加,如果最高位的進製和此高位的進製不同,則產生溢位。2 進製和溢位的概念不一樣。3 預取 取得是編譯後得到的機器 解碼 執行 4 arm的彙編指令長度是確定的,32位。5 一條彙編指令 條件碼 4bit 操作碼 分類碼 s 1bit 目的暫存器 4bit 源暫存器 4bit 立即數...

嵌入式技術學習筆記(三)

linux開發工具 vim 文字編輯器 學會使用和如何配置vim gcc 編譯器 學會製作動態庫和靜態庫及使用和區別 gdb 偵錯程式 設定斷點,單步執行,除錯記憶體錯誤 make 工程管理器 編寫makefile檔案 vim使用 gcc是編譯器,全稱為gnu cc 1 gcc特點 gcc為gnu工...