Re: [請益] Keil C的interrupt用法問題?
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章