音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ù)
這段代碼是甚么意思?(BOOTLOADER中的))
$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
進(jìn)一步調(diào)用$HandleLabel回調(diào)函數(shù)進(jìn)行處理
eg: HANDLE InterruptHandle,就可以調(diào)用InterruptHandle來進(jìn)行處理了

3樓: >>參與討論
nbmbnn
我說一下
因?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
原來如此
 
5樓: >>參與討論
yyccaa
中斷處理
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)。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求助
請(qǐng)教:為什么我老是找不到硬盤?
想研究一下DDR內(nèi)存
求助!
請(qǐng)問:回寫緩沖區(qū)有什么作用?
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)