作者ruemann (树海游魂)
看板ASM
标题Re: [请益] Keil C的interrupt用法问题?
时间Thu Sep 3 11:29:18 2009
※ 引述《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