張明峰:魚與熊掌兼得 !
[導(dǎo)讀]如果中斷中用到了其它復(fù)雜的運(yùn)算,用戶必須明確告訴編譯器那些寄存器或數(shù)據(jù)段需要額外保護(hù)。請(qǐng)參考C18的使用手冊(cè)。
| 1)針對(duì)PIC18系列,進(jìn)入中斷時(shí),不管是高優(yōu)先級(jí)中斷還是低優(yōu)先級(jí)中斷,三個(gè)重要的寄存器--WREG、STATUS和BSR,一定會(huì)被硬件自動(dòng)壓入只有一級(jí)深度的“影子”寄存器中保護(hù); 2)高優(yōu)先級(jí)中斷在處理過程中不可能被低優(yōu)先級(jí)中斷打斷,故影子寄存器中的內(nèi)容不會(huì)被破化。中斷返回指令可以指示用“fast return”形式直接用影子寄存器中的內(nèi)容快速恢復(fù)三個(gè)重要寄存器的原始值; 3)低優(yōu)先級(jí)的中斷服務(wù)可能被高優(yōu)先級(jí)中斷所打斷,故原本也是保護(hù)在影子寄存器中的內(nèi)容可能會(huì)被沖掉。因此用戶必須自己編寫額外的代碼將上述三個(gè)寄存器保存在其它獨(dú)立的備份單元中,不必理會(huì)影子寄存器的內(nèi)容。返回時(shí)也不能通過“fast return”形式利用影子寄存器的內(nèi)容恢復(fù)原現(xiàn)場(chǎng),自己編寫代碼從備份單元中恢復(fù)寄存器的原始值; 4)如果用MPLAB-C18編譯器,只要聲明了低優(yōu)先級(jí)的中斷服務(wù)函數(shù)屬性為“interruptlow”,編譯器會(huì)自動(dòng)加入額外的指令保護(hù)和恢復(fù)三個(gè)重要寄存器。中斷退出時(shí)也不會(huì)用“fast return”形式。 5)如果中斷中用到了其它復(fù)雜的運(yùn)算,用戶必須明確告訴編譯器那些寄存器或數(shù)據(jù)段需要額外保護(hù)。請(qǐng)參考C18的使用手冊(cè)。 |
請(qǐng)教張老師:關(guān)于中斷嵌套的問題? - zxc526 2004-10-9 17:55:19 [ID:1390531 點(diǎn)擊:146] (334 Bytes) (100)
魚與熊掌兼得 - 張明峰 2004-10-15 11:37:48 [ID:1397533 點(diǎn)擊:23] (948 Bytes) (90)
簡(jiǎn)介C18F8720單片機(jī)的中斷嵌套 - 笑蒼天 2004-10-15 10:10:48 [ID:1397378 點(diǎn)擊:24] (2662 Bytes) (0)
那問題出在250us的那個(gè)中斷上 - 張明峰 2004-10-11 14:16:21 [ID:1392725 點(diǎn)擊:68] (53 Bytes) (0)
中斷 - zxc526 2004-10-10 22:11:10 [ID:1391989 點(diǎn)擊:84] (232 Bytes) (0)
中斷函數(shù)定義完全錯(cuò)誤 - 張明峰 2004-10-10 16:59:29 [ID:1391669 點(diǎn)擊:102] (786 Bytes) (1)
進(jìn)到中斷入口的時(shí)候…… - yewuyi 2004-10-10 14:28:50 [ID:1391481 點(diǎn)擊:105] (70 Bytes) (0)
中斷服務(wù)程序! - zxc526 2004-10-10 11:33:09 [ID:1391217 點(diǎn)擊:115] (1321 Bytes) (0)
不要去碰GIEH和GIEL - 張明峰 2004-10-9 18:31:53 [ID:1390559 點(diǎn)擊:136] (30





