打印

请教几个关于硬中断与软中断的!重入!问题

[复制链接]
2126|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kkjiongquan|  楼主 | 2010-2-6 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在移植uCOS-II,发现了几个问题,想请教各位高手
  1)对于裸机:为什么网上与书籍再处理SWI ,IRQ中断重入的时候都只是把R0-R3,R12,LR入栈,那其他的R4-R11为什么不需要入栈呢?
  2)对于uCOS-II:由于需要任务调度,换任务前会把R0-R12,LR,PC,CPSR,都入栈,那为什么现在又要保存所有的寄存器呢?
  3) 根据以上两个问题我有一点点想法:会不会中断发生时CPU所使用的寄存器会有限制呢?据我了解,SWI中断处理程序可以通过R0-R3传递4个参数,而IRQ中断处理程序也是首先用R0传递参数,但是不知道参数多了是不是就想SWI一样用R0-R3传递。但是其他寄存器没可能不给用啊。。。。


  其实以上的问题有一部分是可以直接用AXD调试看结果的,但是本人的笔记本没有并口,用转USB的数据又有错误,等回学校时间又太长了,所以现在唯有请教一下高手们

相关帖子

沙发
ShakaLeo| | 2010-2-7 12:09 | 只看该作者
ARM编译器都会使用R0-R3传递参数,使用R4-R11存储局部变量,所以在进入中断的时候,R0-R3是必须入栈的内容,而R4-R11并非必须入栈,除非ISR程序中也使用了R4-R11存储局部变量。而且,如果在ISR中调用其他函数,而这个函数也使用了R4-R11存储局部变量,那么R4-R11的入栈会在ISR程序调用这个函数的时候进行,而不是在刚刚进入中断的时候进行,所以,并不一定是R4-R11没有入栈,而是可能你没有看到他们入栈的过程。
UCOS II又一个任务切换到另一个任务,是两个相对独立的环境,另一个任务可能会使用到R0-R12,LR,PC,CPSR这些寄存器中的任何一个,所以在切换任务的时候需要保存所有寄存器就很好理解了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

50

帖子

1

粉丝