問題:在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,readonlyexport 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環境高階程式設計看一遍.你會發現一切都會順其自然.之...