Re: [請益] Keil C的interrupt用法問題?

看板ASM作者 (樹海游魂)時間15年前 (2009/09/03 11:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《s834251 (rudder)》之銘言: : 各位先進好: : 我有一個關於Keil C在使用中斷時的一個問題 : 我有爬過文,但是都說的不太清楚 : 我看8051使用Keil C的書籍,上面寫著中斷宣告的用法為 : "void 中斷函數名稱(void) interrupt 中斷型號 using 暫存器" : 我主要針對"using 暫存器"這一塊有用法的疑問 : 書上並沒寫"using 暫存器"使用上有什麼要注意的地方 : 但我想要問,若我宣告 "void EX0_int(void) interrupt 0 using 1" : 與宣告"void EX0_int(void) interrupt 0 using 2" : 使用上會有不同嗎? 當然會不同啦,代表 interrupt 在執行時所使用的 bank 數不同 那詳細到底那裡不同呢? 簡單的說,8051有一塊 4*8 = 32 bytes 的記憶體可以被分成 4 個 bank 每個 bank 都有一組 8 bytes 的空間,且命名為 R0~R7 8051有針對 R0~R7 設計一些指令,如果資料存在 R0~R7 時,搬移的速度會快一些 不過在進出interrupt或呼叫function時,不會對 R0~R7 做保存(要也可以啦,不過 不會有人做這種浪費空間的事情) 所以如果你主程式用 bank0 然後 interrupt 也用 bank0,而且在 interrupt 中有對 R0~R7做存取,那有可能原來在主程式中的資料會被破壞,反過來也是一樣,然後就造 成靈異現象了 不過每個 interrupt 的 使用 bank 可以設成相同,因為理論上在執行中斷程式時,不 會有另一個中斷來中斷它,同時間只有一組中斷程式會被執行 : 謝謝~~ 現在不是剛開學而已嗎?有那麼快就開始上課啊 -- 我是路人甲 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.117.158
文章代碼(AID): #1AdpWHYz (ASM)
文章代碼(AID): #1AdpWHYz (ASM)