共2条
1/1 1 跳转至页
S3C4510B 哪个哥哥精通S3C4510B的汇编,麻烦请教一个问题

问
我在编写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,则从中断处理程序返回的时候用户模式的程序就会出问题了。
书上说进程切换在中断服务程序(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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |