ARM嵌入式實驗

2021-08-20 12:32:40 字數 1099 閱讀 7554

問題:在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。(獲取pll中m,p值,c程式呼叫彙編函式)

在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。

在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段

實現:c程式呼叫:

extern int m();

extern int p();

匯程式設計序:

area m, code, readonly

export m      

mldr r0, = pllcfg_val

and r0,0x0000001f

adds r0,r0,#1

bx  lr

area p, code, readonly

export p     

pldr r0, = pllcfg_val

mov r1,#0x00000003

ands r0,r1,r0,lsr #5

bx  lr              //返回

end例子:乙個六個數相加的函式。

area    example,code,readonly

export sum

entry

sum add r0,r0,r1

add r2,r2,r3

add r0,r0,r2

ldr r4,[sp] //從堆疊裡讀第四個引數

ldr r5,[sp,#

4] //從堆疊裡讀第五個引數

add r4,r4,r5

add r0,r4,r0

bx lr

end

其實關鍵的問題是引數和返回值。

我們能看到,c裡面呼叫這個函式,c給裡面傳引數。

彙編是怎麼接受這些引數的呢?

4個以內的引數,直接存放在r0~r3 這4個暫存器裡面。

4個以後的引數放在堆疊裡。

如果函式有返回值,那麼返回值放在r0裡。

結果放在r0,然後bx lr返回

arm嵌入式led燈閃爍實驗報告 嵌入式實驗報告

3 設定傳輸資料量。4 設定通道4 的配置資訊。5 使能dma1 通道4,啟動傳輸。通過以上5 步設定,我們就可以啟動一次usart1 的dma 傳輸了。dma控制器對dma請求判別優先順序及遮蔽,向匯流排裁決邏輯提出匯流排請求。當cpu執行完當前匯流排週期即可釋放匯流排控制權。此時,匯流排裁決邏輯...

嵌入式,ARM掃盲

炮製了一篇,基本是拿來主義,不算技術,只能算雜談。注 此處正常模式和普通模式是我生造的術語,沒有確定是否存在,各位請暫且忽略。arm異常處理過程 arm的異常,包括復位 未定義指令 軟體中斷 資料訪問中止 外部中斷請求 快 速中斷請求。處理過程 1 儲存現場,包括處理器當前狀態 中斷遮蔽位 cpsr...

嵌入式arm開發學習

今天是學習arm的第二天.感覺又懂了一點.記錄下來,以便以後不時之需.今天先是看了一些linux應用開發的東西,由於之前自己對linux程式設計還算是有過了解,這部分看得很快,基本沒有什麼閱讀障礙.個人建議想學嵌入式linux的人,最好先把unix環境高階程式設計看一遍.你會發現一切都會順其自然.之...