这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » S3C4510B 哪个哥哥精通S3C4510B的汇编,麻烦请教一个问题

共2条 1/1 1 跳转至

S3C4510B 哪个哥哥精通S3C4510B的汇编,麻烦请教一个问题

院士
2006-09-17 18:14:16     打赏
S3C4510B 哪个哥哥精通S3C4510B的汇编,麻烦请教一个问题



关键词: S3C4510B     哪个     哥哥     精通     汇编     麻烦         

院士
2006-12-22 22:43:00     打赏
2楼
问    我在编写S3C4510B处理器进程切换问题时,遇到一些问题理解不到,望大哥赐教。
   书上说进程切换在中断服务程序(IRQ)保存老进程的寄存器到该进程的堆栈,然后将新进程的指针赋给SP,用LDMFD  sp!, {r0-r12, lr, pc}指令将SP所指向的堆栈单元内容弹到用户模式的寄存器中,中断服务程序结束,开始在用户模式下执行新进程。
   这里有个问题,我认为是这样的:IRQ下的SP和用户模式下的SP不是同一物理寄存器,IRQ的SP指针变了,但用户模式下的SP并没改变,模式切换回来时,用户模式下的SP的值并不是正确的值,所以书上的代码这样写,我觉得有问题。
麻烦大哥指导一下小弟。
   谢谢
1: 应该是没问题的用户模式与IRQ模式有着各自的SP,所以你所说的问题不会存在的.
2: 不懂呢小弟还是不懂,LDMFD  sp!, {r0-r12, lr, pc}改变的是IRQ模式下的SP,而用户模式下的SP并没有被置成IRQ模式下SP的值,那在下次保存寄存器到用户模式下的SP所指地址时就不对了啊? 3: 我的理解STMFD    SP!, {R0-R7, LR}
是保存的用户环境


进入irq后使用的是irq环境,即irq堆栈
irq结束后自动切换回用户模式

然后
LDMFD    SP!, {R0-R7, LR}
恢复的用户环境


所以在进入irq的前后使用的用户堆栈,irq部分使用的是irq堆栈,不冲突(如你把usr和irq堆栈设成一样,就冲突了)
4: 楼上的哥哥不对喔我查了资料,STMFD SP!, {R0-R12, LR}指令应为STMFD SP!, {R0-R12, LR}^时,其中的R0-R7和LR才是用户模式下的寄存器,而指令中的SP是当前特权模式下的寄存器(即IRQ模式下的SP),所以该指令并没有将用户模式下的寄存器保存到用户模式SP所指向地址中。
5: 哪个哥哥再帮忙看一下哪个哥哥再帮忙看一下 6: ?用户模式下的SP为什么要改变?

如果在中断处理程序中改变了用户模式下sp,则从中断处理程序返回的时候用户模式的程序就会出问题了。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]