共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |