|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
這段代碼是甚么意思?(BOOTLOADER中的)) |
| 作者:radio_head 欄目:ARM技術(shù) |
$HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;站空減一個(gè)空間 stmfd sp!,{r0} ;R0入棧 ldr r0,=$HandleLabel ;$HandleLabel地址拷到r0 ldr r0,[r0] ;????WHAT MAEN?? str r0,[sp,#4] ;R0有入SP加4的位置 ldmfd sp!,{r0,pc} ;RO,PC出棧? MEND 這是BOOTLOADER中的一段代碼,一段宏定義,請(qǐng)問它是作什么用的?我看不出他的作用,請(qǐng)哪位給我講下?最好可以舉個(gè)調(diào)用他的例子??謝謝,請(qǐng)幫我看下 |
| 2樓: | >>參與討論 |
| 作者: jinz 于 2006/1/8 19:25:00 發(fā)布:
進(jìn)一步調(diào)用$HandleLabel回調(diào)函數(shù)進(jìn)行處理 eg: HANDLE InterruptHandle,就可以調(diào)用InterruptHandle來進(jìn)行處理了 |
|
| 3樓: | >>參與討論 |
| 作者: nbmbnn 于 2006/1/10 14:43:00 發(fā)布:
我說一下 因?yàn)橛脩艟帉懙闹袛喑绦,不一定非在啟?dòng)代碼中,以匯編程序的形式來編寫,多數(shù)以C語(yǔ)言編寫,并且在任意用戶程序空間,但是中斷程序的相對(duì)跳轉(zhuǎn)跨度有限,所以這里使用了一個(gè)二級(jí)跳的舉措,現(xiàn)在啟動(dòng)代碼的允許跳轉(zhuǎn)的范圍內(nèi)留一個(gè)空間,然后用戶將中斷服務(wù)程序的入口地址放里面。在發(fā)生中斷時(shí),取出這個(gè)內(nèi)留空間的內(nèi)容(中斷服務(wù)程序的入口地址)然后跳到這個(gè)位置就行了。。。 |
|
| 4樓: | >>參與討論 |
| 作者: mindshare 于 2006/1/15 17:58:00 發(fā)布:
原來如此 |
|
| 5樓: | >>參與討論 |
| 作者: yyccaa 于 2006/1/15 20:30:00 發(fā)布:
中斷處理 jinz和nbmbnn解釋得很正確的。最近也在學(xué)中斷處理,碰到和樓主相似的代碼,做法是這樣的: 真正跳轉(zhuǎn)到中斷服務(wù)程序的代碼可能是 IRQSVR xxxxx(省略) BL Irq_sever xxxxx 在不遠(yuǎn)的某處有一段DCD的空間聲明 ... IRQAddr DCD #4 ... 而在復(fù)位程序里有把IRQSVR地址值復(fù)制到IRQAddr空間的代碼,這樣arm啟動(dòng)后復(fù)位程序用相應(yīng)的匯編中斷程序的地址如IRQSVR初始化了像IRQAddr這些DCD聲明的空間。 在中斷向量列表的一段跳轉(zhuǎn)語(yǔ)句后可以使用樓主提到的宏定義: IrqHandler HANDLER IRQAddr 并在中斷向量列表里寫 B xxxx B IrqHandler 這樣,當(dāng)irq中斷發(fā)生時(shí)由中斷向量列表的B IrqHandler跳轉(zhuǎn)至展開的宏定義: IrqHandler sub sp,sp,#4 ;站空減一個(gè)空間 stmfd sp!,{r0} ;R0入棧 ldr r0,=IRQAddr ;$HandleLabel地址拷到r0 ldr r0,[r0] ;***這里r0值就是IRQSVR了 str r0,[sp,#4] ;R0有入SP加4的位置 ldmfd sp!,{r0,pc} ;出棧到RO,PC 然后pc等于從IRQAddr所保存的IRQSVR標(biāo)號(hào)的地址值,即pc由IRQSVR處取指執(zhí)行。 可以說,從中斷向量處到真正的C代碼的中斷服務(wù)程序,一共跳了3次。 宏里使用的2句ldr,是不是這樣目的就是為了實(shí)現(xiàn)大范圍的跳轉(zhuǎn)呢?而且IRQSVR可以寫到別處,與c的irq程序在32M范圍內(nèi)就行了?感覺是不是麻煩了點(diǎn)。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |