共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年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |